Foo.where(:some_id => 1).update_all(:some_columnn => "1")
これはFooを更新する正しい方法ですか?私はオブジェクトを見つけて更新したくありません。ActiveRecordでオブジェクトをロードせずに列を更新する方法
Foo.where(:some_id => 1).update_all(:some_columnn => "1")
これはFooを更新する正しい方法ですか?私はオブジェクトを見つけて更新したくありません。ActiveRecordでオブジェクトをロードせずに列を更新する方法
はい、正しい方法ですが、覚えておいてください。n oコールバックまたは検証が実行されます。
また、update_allも条件を受け入れます。この
Foo.update_all({:some_columnn => "1"}, {:some_id => 1})
オブジェクトをインスタンス化したくない場合は正しいアプローチですが、これはモデルの検証やコールバックを実行しないことを意味します。つまり、SQLの更新コマンドに直接移行します。
あなたはupdate_all
update_all(アップデート、条件= nilを、オプション= {})
だから、あなたがすることができるのAPIに従って、条件を使用することができます。
Foo.update_all(:some_column => '1', :some_id => 1)
As of Rails 4と同様に、条件がもはやupdate_all
方法で提供されていないが、代わりに前のコレクションに指定されています。たとえば、
# updates everything, as usual
Foo.update_all(some_column: '1')
# update only the specified rows
Foo.where(some_id: 1).update_all(some_column: '1')