属性を更新する必要がありますが、次のような特定の条件を持つ行に対してのみです
["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を正しくエスケープするために、必ず配列形式の条件を使用してください。
条件を使用して一括 SQL 更新を行うこともできますwhere
。これは、より読みやすいことがわかりました。
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'")