更新rails中模型的所有数据

时间:2011-07-12 08:02:10

标签: ruby-on-rails activerecord nested-attributes

例如我们有:

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可能有一些嵌套模型。

你有什么想法吗? 附:目前我只想要有一些父母,并为它做更新......

1 个答案:

答案 0 :(得分:0)

你的{... books ...}哈希要么有多本书,要么

books.each { |id, book| Book.find(id).update_attributes(book) }

或者您想要进行真正的批量更新(对所有正在运行的书籍都有相同的更新) 然后你可以使用http://apidock.com/rails/ActiveRecord/Relation/update_all