レール3では、activerecordを使用して、:hiddenフィールドをTRUE条件を満たすすべてのレコード...たとえば、:condition => [ "phonenum = ?", some_phone_number ]
Rails 3 + activerecord、条件を満たすすべてのレコードの1つのフィールドを "一括更新"する最良の方法
単一のクエリでは実行できない場合、最適なアプローチは何ですか?
レール3では、activerecordを使用して、:hiddenフィールドをTRUE条件を満たすすべてのレコード...たとえば、:condition => [ "phonenum = ?", some_phone_number ]
Rails 3 + activerecord、条件を満たすすべてのレコードの1つのフィールドを "一括更新"する最良の方法
単一のクエリでは実行できない場合、最適なアプローチは何ですか?
条件のためのオプションの二番目のパラメータで使用update_all:
Model.update_all({ hidden: true }, { phonenum: some_phone_number})
レールの条件は3.スコープの組み合わせを使用してupdate_allすることができますことはできませんupdate_all
Model.where(phonenum: some_phone_number).update_all(hidden: true)
**これは間違っています**。このページには、 'options **を提供する** 'と書かれていますが、' options'ハッシュに入るさまざまなオプションを記述するメソッドリストのすぐ上の段落にあります。これは 'update_all()'の 'conditions'引数を含みません。 – Ashe
彼が間違っていると私は同意します。 API Avatar.update_all ['migrated_at =?'、Time.now.utc]、['migrated_at>?'、1.week.ago]はmigrated = nowを設定し、migrated_atは1週間以内です。 – ctilley79
rails 4のドキュメントでは、上記の方法が実際に行く方法です - http://apidock.com/rails/ActiveRecord/Relation/update_all - #タイトルに「Rails」の書籍をすべて更新してください Book.where 'タイトルLIKE?'、 '%Rails%')。update_all(作者: 'David') –
コールバックをトリガーする場合:
class ActiveRecord::Base
def self.update_each(updates)
find_each { |model| model.update(updates) }
end
def self.update_each!(updates)
find_each { |model| model.update!(updates) }
end
end
そして:
Model.where(phonenum: some_phone_number).update_each(hidden: true)
どの値が元update_allための一定値未満である場合、約({:隠された=>真}、{:DATE_CREATED
ctilley79
@ ctilley79、私はこれがうまくいくと思います: 'Model.where(" date_create <? "、a_certain_date).update_all(隠し:true)' – Dogbert
注:これは 'counter_cache'を更新しません。注意してください。 – sscirrus