Ruby on rails rails:在重新加载页面时删除数据

Ruby on rails rails:在重新加载页面时删除数据,ruby-on-rails,function,hyperlink,helper,Ruby On Rails,Function,Hyperlink,Helper,我的应用程序助手中有一个方法,用于停用数据库中的任务 应用程序助手: def link_to_destroy_task(task_id) Task.find(task_id).deactivate end 型号: def self.deactivate() update_attribute(:active, false) end 视图: [拖动] “com_任务”,:action=>“编辑”,:id=>task.id%> 由于某些原因,当页面加载时,它正在删除列表中的

我的应用程序助手中有一个方法,用于停用数据库中的任务

应用程序助手:

  def link_to_destroy_task(task_id)
    Task.find(task_id).deactivate
  end
型号:

def self.deactivate()
  update_attribute(:active, false)
end
视图:


[拖动]
“com_任务”,:action=>“编辑”,:id=>task.id%>
由于某些原因,当页面加载时,它正在删除列表中的所有内容。不仅仅是将“活动”切换为“错误”。它正在从数据库中完全删除它

我使用的是fixture,所以我重新加载了所有的测试数据,我可以刷新一次以再次看到数据,但下次重新加载时数据就消失了


我已将该方法的名称更改为“deactivate”,因为我认为destroy已被执行,但该方法仍在运行中,没有单击。它不再删除,但正在停用所有内容。

请注意这一行

<%= link_to_function '[Delete]', link_to_destroy_task(task.id) %>

实际上,您正在执行
link\u to\u destroy\u task
函数,每个任务执行一次

从文件中

定义链接到函数(名称、*args和块)
返回给定+名称+的链接,该链接将使用onclick处理程序触发JavaScript+函数+,并在事实发生后返回false

从未使用过此方法,但其目的似乎是调用JavaScript函数,而不是Ruby函数。

还有一些例子。

之所以会发生这种情况,是因为您正在视图中为每个项目调用
deactivate
!link_to_函数的第二个参数是运行实际的停用

我认为您误解了
链接到函数
——它在单击时不运行ruby函数,而是运行您创建的javascript函数。第二个参数需要是包含javascript函数的字符串。Rails将无法在某人的浏览器中运行ruby方法

这里有一个指向文档的链接,可以帮助您找到正确的方向:


哦。我最初将它放在控制器中,而不是我认为应该将其移动到助手。是否有方法在应用程序控制器中创建指向操作的链接?我希望它可以从不同控制器的不同视图中使用。我不认为复制代码是个好主意
<%= link_to_function '[Delete]', link_to_destroy_task(task.id) %>