【问题标题】:rails: data being deleted on page reloadrails:页面重新加载时正在删除的数据
【发布时间】:2011-04-27 18:35:09
【问题描述】:

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

应用助手:

  def link_to_destroy_task(task_id)
    Task.find(task_id).deactivate
  end

型号:

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

查看:

<ol id="tasks">
  <% @Tasks.each do |task| %>
      <%content_tag_for :li, task do %>
      <span class ="handle"> [drag] </span>
      <%= link_to task.name, :controller => "com_tasks", :action => "edit", :id => task.id %>
      <%= link_to_function '[Delete]', link_to_destroy_task(task.id) %>
    <% end %>
  <% end  %>
</ol>

由于某种原因,当页面加载时,它会从列表中删除所有内容。不仅仅是将 active 切换为 false。它正在从数据库中彻底清除它。

我正在使用fixture,所以我重新加载了所有的测试数据,我可以刷新一次再次看到数据,但是下次我重新加载它就没有了。

我已将该方法的名称更改为“停用”,因为我认为销毁已被采用,但该方法仍在运行而不被单击。它不再删除,而是停用所有内容。

【问题讨论】:

    标签: ruby-on-rails function hyperlink helper


    【解决方案1】:

    发生这种情况是因为您在视图中为每个项目调用 deactivate!您的 link_to_function 的第二个参数正在运行实际的停用。

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

    这里是文档的链接,它应该能让你走上正轨:

    http://apidock.com/rails/ActionView/Helpers/JavaScriptHelper/link_to_function

    【讨论】:

    • 哦。我最初将它放在控制器中,而不是我认为我打算将它移动到帮助器中。有没有办法在应用程序控制器中创建指向操作的链接?我希望它可以从不同控制器的不同视图中获得。而且我不认为复制代码是个好主意
    【解决方案2】:

    注意这一行

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

    您实际上是在此处执行link_to_destroy_task 函数,每个任务执行一次。

    来自文档

    def link_to_function(name, *args, &block)
    返回给定 +name+ 的链接,该链接将使用 onclick 处理程序触发 JavaScript +function+,并在事实。

    从未使用过此方法,但它的目的似乎是调用 JavaScript 函数,而不是 Ruby 函数。
    也有例子。

    【讨论】:

      猜你喜欢
      • 2014-01-18
      • 2017-09-16
      • 1970-01-01
      • 2011-12-15
      • 2016-10-07
      • 2018-03-29
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      相关资源
      最近更新 更多