【问题标题】:Destroy data based on HTML class name in Rails在 Rails 中根据 HTML 类名销毁数据
【发布时间】:2012-06-16 22:42:36
【问题描述】:

我正在使用 Rails (3.2.5) 构建一个简单的待办事项列表。

我将所有用户的待办事项显示在一个无序列表中,每个列表项都是待办事项本身。通过单击待办事项,用户将其标记为已完成。使用 jQuery,我给 li 一个 done 类,这样我就可以改变它的样式。通过单击“清除已完成”按钮,我希望销毁已完成的项目(并从数据库中删除)。

如何做到这一点?

注意:我基本上是在尝试使用 Rails 重新创建这个应用程序:http://davidpdrsn.com/todos/

【问题讨论】:

  • 那你为什么不看看他是怎么做到的?

标签: html ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

您可以使用远程表单来完成 所以你会有类似的东西

每个项目都有一个带有remote: true 的表单,或者您可以只有一个表单并使用 JQuery 提交。

class TodoController
  def set_completed
    @todo = Todo.find(params[:id])
    @todo.done = true  # you could move this to your model and do something like @todo.done! and that would save it automatically
    @todo.save
  end

  def  destroy_completed 
    @todos_to_delete = Todo.where(done: true)# here you could also move it to your model and do it like Todo.completed
    @todos_to_delete.destroy_all
  end
end

然后你会使用 js 呈现响应以进行格式化,甚至删除列表中的项目,例如

views/todo/set_completed.erb.js

$("#item_<%= @todo.id %>").addClass("completed");

【讨论】:

    【解决方案2】:

    假设模型名为Todo,完成的列名为completed,您可以在控制器中编写其中一个:

    Todo.destroy_all(:completed => true)
    Todo.where(:completed => true).destroy_all
    

    如果您需要有关如何管理 ajax 请求/响应的帮助,here 有一个好的开始(抱歉,我不想给您解决方案,恕我直言,您应该自己解决)

    资源:ActiveRecord#Base::destroy_all

    【讨论】:

    • 我会做一个自定义控制器动作来响应 js 更新数据库然后运行 ​​jquery 来更新视图
    • @sergio-tulentsev 抱歉,解决方案很简单,并且有很多关于这个论点的资源(railstutorial、railsforzombies 等);恕我直言,重要的是他自己找到这个解决方案以便变得更好
    猜你喜欢
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2020-08-31
    • 2017-03-15
    • 2012-08-13
    • 2020-12-06
    • 2013-02-16
    • 2019-04-15
    相关资源
    最近更新 更多