2011-02-06 3 views

답변

84

조건에 대한 선택적인 두 번째 매개 변수를 사용 update_all :

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

어떤 값이 전 update_all에 대한 특정 값보다 작은 경우에 대한 ({: 숨겨진 => TRUE}, {: DATE_CREATED ctilley79

+7

@ ctilley79, 나는 이것이 작동해야한다고 생각한다 :'Model.where ("date_create Dogbert

+0

Note : 이것은 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 ** 해시"에 들어갈 수있는 다양한 옵션을 설명하는 메소드 목록 바로 위에있는 단락마다 "** 옵션을 제공함 **"라고 말합니다. 이것은'update_all()'에'conditions' 인수를 포함하지 않습니다. – Ashe

+0

나는 그가 틀렸다고 동의한다. API Avatar.update_all [ 'migrated_at =?', Time.now.utc]에 따르면 [migrated_at>? ', 1.week.ago]는 migrated_at가 1 주일 이내에 migrated_at가 설정된 위치를 설정합니다. – ctilley79

+4

레일 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) 
관련 문제