2

属性を更新する必要がありますが、次のような特定の条件を持つ行に対してのみです

["recipient_id = ? and inbox_id = ? and status='unread'", current_user.id, @inbox.id]

どうすればいいのですか?

4

3 に答える 3

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を正しくエスケープするために、必ず配列形式の条件を使用してください。

于 2010-08-04T04:37:01.587 に答える
1

条件を使用して一括 SQL 更新を行うこともできますwhere。これは、より読みやすいことがわかりました。

Model.where(recipient_id: current_user.id)
     .where(inbox_id: @inbox.id)
     .where(status: 'unread')
     .update_all("attr1='something_new'")
于 2016-03-15T16:00:33.947 に答える
0
Model.update_all("foo='bar'", "recipient_id = #{current_user.id} and inbox_id = #{@inbox.id} and status='unread'")
于 2010-08-04T04:09:13.690 に答える