【发布时间】:2012-03-20 22:46:48
【问题描述】:
后端:我有一个模型(用户),它有很多另一个模型(ContactPreference)。 前端:允许用户重新排序、添加和删除特定用户的联系偏好的界面。
我想让用户通过一个表单提交一次性提交所有更改。我现在这样做的方式是在用户模型中使用allows_nested_attributes_for :contact_preferences,并天真地发布已编辑的首选项列表的属性。除了一个明显的错误外,它工作得很好:如果用户删除了联系首选项,则根本不会发送 ID,并且首选项不会从数据库中删除。
allows_nested_attributes_for 支持从集合中删除对象,但它需要客户端跟踪删除的 ID 并传递'_destroy' => 1 参数。这是我宁愿避免的混乱逻辑;我只想删除对象,除非它们明确包含在参数中。据我所知,allows_nested_attributes_for 不支持这种行为,所以我希望实现自己的解决方案。
进行这种更新的最有效(就数据库访问而言)方法是什么?我是否删除所有内容并从头开始重建列表?我是否加载关联并挑选出未明确包含的对象?也许我可以使用一些聪明的 ActiveRecord 魔法?
【问题讨论】:
标签: ruby-on-rails-3 activerecord nested-attributes