2012-08-01 2 views
3

저는 레일즈 3.0을 실행 중입니다. 부울 필드를 변경하려고하지만 update_at 타임 스탬프를 변경하지 않으려는 객체가 있습니다. 우리는 곧 레일을 업그레이드하지 않으므로 update_column은 문제가되지 않습니다. 이 유형의 많은 객체가 동시에 호출 된 메소드를 가질 수 있기 때문에 차라리이 (예 : http://blog.bigbinary.com/2009/01/21/override-automatic-timestamp-in-activerecord-rails.html)을 지원하기 위해 모델 수준의 변경을하지 않을 것입니다.updated_at 필드를 변경하지 않고 속성을 업데이트하십시오.

+3

항상 원시 SQL을 실행할 수 있습니까? –

+0

가능한 [자동으로 레일 타임 스탬프 필드를 업데이트하지 않도록하는 방법이 있습니까?] (http://stackoverflow.com/questions/861448/is-there-a-way-to-avoid-automatically-updating-rails-timestamp -fields) –

답변

7

당신은 .update_all 사용할 수 있습니다

User.where(:id => @user.id).update_all(:your_bool_field => true) 
+0

, 고마워요! –

+4

콜백을 유발하지 않도록주의하십시오. – mahemoff

6

업데이트 전에 record_timestamps 속성을 false로 설정할 수 있습니다. 자세한 내용은

User.record_timestamps=false 
User.first.update_attributes(:field1 => "Test") 
User.record_timestamps=true 

: http://blog.bigbinary.com/2009/01/21/override-automatic-timestamp-in-activerecord-rails.html

+0

맞습니다. 원래 블로그 게시물에 대한 링크를 게시했습니다. 나는 클래스 속성을 변경하는 것을 포함하지 않는 다른 방법을 찾고있다. –

+2

쓰레드 안전하지 않음 – mpoisot

+0

이것은 매우 위험한 일로 update_attributes가 실행되는 동안 업데이트 된 사용자는 타임 스탬프되지 않습니다. 단일 사용자의 경우 동시 사용자가 쉽게 손상 될 수있는 문제는 아닙니다. – Batou99

3

레일 (5)는 타임 스탬프를 업데이트하지 않고 기록을 갱신 할 수 있습니다. 우리는 액티브 오브젝트를 저장 레일 4.x의에서

후 레일은 자동으로 필드를 ActiveRecord::Base#save 터치 옵션의 updated_at 또는 updated_on

추가 업데이트됩니다.

레일 5에서 touch: false을 저장 옵션으로 전달하여 타임 스탬프를 업데이트하지 않고 개체를 업데이트 할 수 있습니다. touch의 기본 옵션은 true입니다.

>> user = User.new(name: 'David', email: '[email protected]') 
>> user.save 
    INSERT INTO "users" ("name", "created_at", "updated_at", "email") VALUES (?, ?, ?, ?) 
    [["name", "John"], ["created_at", 2016-05-12 05:10:22 UTC], ["updated_at", 2016-05-12 05:10:22 UTC], ["email", "[email protected]"]] 
=> true 

>> user.updated_at 
=> Thu, 12 May 2016 05:10:22 UTC +00:00 
>> user.name = "John" 
>> user.save(touch: false) 
    UPDATE "users" SET "name" = ? WHERE "users"."id" = ? [["name", "John"], ["id", 12]] 
=> true 

>> user.updated_at 
=> Thu, 12 May 2016 05:10:22 UTC +00:00 
관련 문제