2010-10-26 24 views
10

Basit bir has_many derneğim var ve ilgili nesneyi public ile private arasındaki bir öznitelik değiştirmek istiyorum.ActiveRecord'da çoklu modellerde toplu güncelleştirme özniteliği?

class User < ActiveRecord::Base 
    has_many :posts 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

user = User.first #=> #<User...> 
user.posts.count #=> 100 
# something like this: 
user.posts.bulk_update_attribute("privacy", "private") #=> 1 DB call 

cevap

33

Sana update_all aradığınız inanıyoruz: Ne Bunu yapmanın en iyi yolu budur.

sizin örnekte

, bunu

Post.update_all("privacy = 'private'", ["user_id = ?", user.id]) 

Ya @ jenjenut233

user.posts.update_all("privacy = 'private'") 
+2

işaret olarak da yapabilirsiniz gibi bir şey olmaya yeniden ediyorum: user.posts.update_all ("gizlilik = 'özel' ') – jenjenut233

+0

Güzel. Sanırım bunu varsaymalıydım! – theIV

+2

Bunun doğrulama/geri arama gerçekleştirmediğini unutmayın (sorun olabilir veya olmayabilir). Ayrıca, user.posts.update_all (gizlilik: "private") 'yazabilirsiniz. – tokland

İlgili konular