2011-02-06 6 views

答えて

84

条件のためのオプションの二番目のパラメータで使用update_all

Model.update_all({ hidden: true }, { phonenum: some_phone_number}) 
+2

どの値が元update_allための一定値未満である場合、約({:隠された=>真}、{:DATE_CREATED ctilley79

+7

@ ctilley79、私はこれがうまくいくと思います: 'Model.where(" date_create <? "、a_certain_date).update_all(隠し:true)' – Dogbert

+0

注:これは 'counter_cache'を更新しません。注意してください。 – sscirrus

84

レールの条件は3.スコープの組み合わせを使用してupdate_allすることができますことはできませんupdate_all

Model.where(phonenum: some_phone_number).update_all(hidden: true) 

リファレンス:http://m.onkey.org/active-record-query-interface

+4

**これは間違っています**。このページには、 'options **を提供する** 'と書かれていますが、' options'ハッシュに入るさまざまなオプションを記述するメソッドリストのすぐ上の段落にあります。これは 'update_all()'の 'conditions'引数を含みません。 – Ashe

+0

彼が間違っていると私は同意します。 API Avatar.update_all ['migrated_at =?'、Time.now.utc]、['migrated_at>?'、1.week.ago]はmigrated = nowを設定し、migrated_atは1週間以内です。 – ctilley79

+4

rails 4のドキュメントでは、上記の方法が実際に行く方法です - http://apidock.com/rails/ActiveRecord/Relation/update_all - #タイトルに「Rails」の書籍をすべて更新してください Book.where 'タイトルLIKE?'、 '%Rails%')。update_all(作者: 'David') –

4

コールバックをトリガーする場合:

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) 
関連する問題