2010-08-04 19 views

回答

4

這取決於您是要執行批量SQL更新,還是要對每個模型執行更新,這些模型還會調用驗證和常規回調鏈。
如果你想實例化對象和運行回調鏈做:

Model.find(:all, :conditions => ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]).each do |obj| 
    obj.update_attributes(...) 
end 

如果你想要做的SQL更新:

Model.update_all("attr1='something', attr2=true,...", ["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]) 

確保使用條件的陣列形式,以保證你正確地逃避你的SQL。

0
Model.update_all("foo='bar'", "recipient_id = #{current_user.id} and inbox_id = #{@inbox.id} and status='unread'") 
1

您還可以使用where條件進行批量SQL更新,我發現這些條件更具可讀性。

Model.where(recipient_id: current_user.id) 
    .where(inbox_id: @inbox.id) 
    .where(status: 'unread') 
    .update_all("attr1='something_new'")