2011-07-12 83 views
3

例如模型的所有數據,我們有:更新在軌

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...}) 

當然書可能有一些嵌套模型。

你有什麼想法嗎? P.S.目前,我只有有一些家長的想法,併爲它做更新...

+0

不幸的是,ActiveRecord不能做所有事情,雖然我可能是錯的,但我不認爲你「重新要求是可能的。我自己對AR的抱怨使得使用多形態+ STI工作變得困難,所以我知道你的感受! 但是,編寫一些迭代遍歷散列並適當創建/更新/銷燬的代碼應該不會太困難。你可以把它變成一個擴展了ActiveRecord功能的gem。 – JamesDS

回答

0

您{...書籍...}散列無論是在其多本圖書您要

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

或你想要做一個真正的批量更新(意思是所有圖書都在更新) 然後你可以使用http://apidock.com/rails/ActiveRecord/Relation/update_all

+0

是的,我知道。你的解決方案沒有做我需要的。我需要更新+刪除+在**一個**查詢中插入不同的數據到** activeRecord **(我特別展示了使用嵌套屬性的示例)。 當然,我可以自己做,但如果軌道可以做嵌套屬性,也許它可以做一堆沒有父母的數據的工作? –