我需要更新属性,但是仅适用于具有类似

的特定条件的行
["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'")
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top