【发布时间】:2023-03-19 22:31:01
【问题描述】:
例如我们有:
class PublicLibrary < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :public_library
end
如果我们想更新 PublicLibrary 中的所有书籍,我们可以添加到 PublicLibrary 模型中
accepts_nested_attributes_for :books, :allow_destroy => true, :reject_if=>:all_blank
现在我们可以做这样的事情了
library=PublicLibrary.find(ID)
library.update_attributes(:books_attributes=>{<bunch of books here>})
所有相关书籍都会更新,部分书籍将被删除,一些新书籍将插入表格书籍中
现在我有一些模型书,与 PublicLibrary 没有关系:
class Book < ActiveRecord::Base
end
我有一个管理面板,可以在一张大桌子上显示所有书籍,并且想一键更新/删除/插入新书籍,所以我想要类似的东西
Book.bulk_update({...books...})
或者使用子集(不确定我是否真的需要它,但如果我们能做到……为什么不知道怎么做?)
books_to_update=Book.where(...).bulk_update({...books...})
当然 Book 可能有一些嵌套模型。
你有什么想法吗? 附:目前我只知道有一些父母并为它做更新......
【问题讨论】:
-
不幸的是,ActiveRecord 不能做所有事情,虽然我可能是错的,但我不认为你要求的是可能的。我对 AR 让多态 + STI 工作变得困难有自己的抱怨,所以我知道你的感受!但是,编写一些遍历哈希并酌情创建/更新/销毁的代码应该不会太难。你可以把它变成一个可以扩展 ActiveRecord 功能的 gem。
标签: ruby-on-rails activerecord nested-attributes