如何与条件update_attributes方法?
-
25-09-2019 - |
题
我需要更新属性,但是仅适用于具有类似
的特定条件的行["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'")
不隶属于 StackOverflow