2010-10-26 39 views
10

我有一個簡單的has_many關聯,並且我想將屬性從public更改爲private關聯的對象。什麼是做到這一點的最好辦法:ActiveRecord中多個模型的批量更新屬性?

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 

回答

33

我相信你正在尋找update_all

在你的榜樣,你會重寫它是像

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

或者像@ jenjenut233指出

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

你也可以這樣做:user.posts.update_all(「隱私= '私人'「) – jenjenut233 2010-10-26 16:45:44

+0

不錯。我想我應該假設! – theIV 2010-10-26 16:52:43

+2

請注意,這不會執行驗證/回調(這可能會也可能不是問題)。你也可以編寫'user.posts.update_all(privacy:「private」)' – tokland 2013-02-24 21:57:19