我需要更新属性,但仅适用于具有特定条件的行,例如
["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]
我该怎么做?
我需要更新属性,但仅适用于具有特定条件的行,例如
["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]
我该怎么做?
这取决于您是要进行批量 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。
您还可以使用where
条件进行批量 SQL 更新,我发现它更具可读性。
Model.where(recipient_id: current_user.id)
.where(inbox_id: @inbox.id)
.where(status: 'unread')
.update_all("attr1='something_new'")
Model.update_all("foo='bar'", "recipient_id = #{current_user.id} and inbox_id = #{@inbox.id} and status='unread'")