2011-07-12 8 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.P.現在、私はいくつかの親を持つことの唯一のアイデアを持っているし、そのための更新を行う...

+0

残念ながら、ActiveRecordはすべてを行うことはできませんが、間違っている可能性はありますが、もう一度お願いします。私は多形体+ STIで作業するのが難しいので、ARについて私自身の悩みがあるので、あなたの気持ちを知っています! しかし、ハッシュを反復処理し、適切な場合には/ updates/destroysを作成するコードを書くのは難しくありません。あなたはActiveRecordの機能を拡張する宝石にすることができます。 – JamesDS

答えて

0

ご{...図書...}ハッシュどちらかあなたが

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

を対象となることで、複数の本を持っていますか、あなたは本当に一括更新を行いたいです(実際に働いているすべての本に同じ更新を意味します) http://apidock.com/rails/ActiveRecord/Relation/update_all

+0

ええ、私はそれを知っています。あなたの解決策は私が必要とすることをしません。私はupdate + delete + ** activeRecord **への**一つの**クエリーで異なるデータを挿入する必要があります(特にネストされた属性を扱う例を示しました)。 確かに自分でやることはできますが、ネストされた属性のためにレールで行えるのであれば、親を持たないデータの集まりのための作業を行うことができますか? –