[RUBY-ON-RAILS] 레일 타임 스탬프 필드를 업데이트 자동으로 방지 할 수있는 방법이 있나요?
RUBY-ON-RAILS레일 타임 스탬프 필드를 업데이트 자동으로 방지 할 수있는 방법이 있나요?
당신이 created_at과 레일 updated_at DB 열이있는 경우 모델 객체를 생성하고 업데이트 할 때 자동으로 해당 값을 설정합니다. 그 열을 건드리지 않고 모델을 저장하는 방법이 있나요?
좀 레거시 데이터 초래하고 있고 나는 (다른 이름) 레거시 데이터 필드에 해당 값에서 해당 값을 설정하고 싶습니다. 나는 모델을 설정 한 다음 모델을 저장, 레일 들어오는 값을 대체하기 위해 나타날 때 내가 찾는거야.
물론 난 그냥 그것을 방지하기 위해 다르게 레일 모델의 열 이름을 수 있지만, 데이터를 가져온 후, 나는 레일이 자동 타임 스탬프 일을하고 싶다.
해결법
-
==============================
1.(당신이 가장자리 레일 인 경우 또는 새 데이터베이스 씨앗) 마이그레이션이나 레이크 작업에서이 작업을 수행합니다 :
(당신이 가장자리 레일 인 경우 또는 새 데이터베이스 씨앗) 마이그레이션이나 레이크 작업에서이 작업을 수행합니다 :
ActiveRecord::Base.record_timestamps = false begin run_the_code_that_imports_the_data ensure ActiveRecord::Base.record_timestamps = true # don't forget to enable it again! end
안전하게 created_at을 설정하고 수동으로 updated_at, 레일 불평하지 않습니다.
노트 : 이것은 또한 개별 모델, 예를 들어, 작동 User.record_timestamps = 거짓
-
==============================
2.대신 방법을 update_column 사용
대신 방법을 update_column 사용
http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_column
update_column(name, value) # Updates a single attribute of an object, without calling save.
검증이 생략됩니다.
콜백은 건너 뜁니다.
updated_at / updated_on 열은 해당 열을 사용할 수있는 경우 업데이트되지 않습니다.
새로운 개체를 호출 할 때, 또는 이름 속성이 읽기 전용으로 표시 될 때 ActiveRecordError를 발생시킵니다.
-
==============================
3.(5)가 그것의 타임 스탬프 updated_at를 업데이트하지 않고 레코드를 업데이트 할 수있는 편리한 방법을 제공 레일 : https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save
(5)가 그것의 타임 스탬프 updated_at를 업데이트하지 않고 레코드를 업데이트 할 수있는 편리한 방법을 제공 레일 : https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-save
귀하의 기록을 업데이트하는 동안 거짓 : 당신은 단지 터치를 통과해야합니다.
>> user = User.first >> user.updated_at => Thu, 28 Apr 2016 20:01:57 IST +05:30 >> user.name = "Jose" >> user.save(touch: false) => true >> user.updated_at => Thu, 28 Apr 2016 20:01:57 IST +05:30
-
==============================
4.당신은 당신의 마이그레이션 안에 다음을 설정할 수 있습니다 :
당신은 당신의 마이그레이션 안에 다음을 설정할 수 있습니다 :
ActiveRecord::Base.record_timestamps = false
또는 altenatively 사용 update_all :
-
==============================
5.레일에서 3+, 하나의 객체에 대해, 세트는 객체가 아닌 클래스 record_timestamps. 즉,
레일에서 3+, 하나의 객체에 대해, 세트는 객체가 아닌 클래스 record_timestamps. 즉,
>> user = User.first >> user.updated_at => Tue, 12 Apr 2016 22:47:51 GMT +00:00 >> user.name = "Jose" => "Jose" >> user.record_timestamps = false >> user.save => true >> user.updated_at => Tue, 12 Apr 2016 22:47:51 GMT +00:00 >> User.record_timestamps => true
이 방법을 사용하면 모델에 대한 글로벌 상태를 만지지 않으며, 당신은 보장 블록의 이전 설정을 복원 기억할 필요가 없습니다.
-
==============================
6.이 일회성 가져 오기 때문에 다음 작업을 수행 할 수 있습니다 :
이 일회성 가져 오기 때문에 다음 작업을 수행 할 수 있습니다 :
-
==============================
7.나는 일시적으로 블록에 타임 스탬프를 해제하는 믹스 인 모듈을 사용하려면 :
나는 일시적으로 블록에 타임 스탬프를 해제하는 믹스 인 모듈을 사용하려면 :
module WithoutTimestamps def without_timestamps old = ActiveRecord::Base.record_timestamps ActiveRecord::Base.record_timestamps = false begin yield ensure ActiveRecord::Base.record_timestamps = old end end end
당신이 그것을 필요로 할 때마다 그런 다음 당신은 그것을 사용할 수 있습니다
class MyModel < ActiveRecord::Base include WithoutTimestamps def save_without_timestamps without_timestamps do save! end end end
아니면 그냥 일회성이 같은 :
m = MyModel.find(1) WithoutTimestamps.without_timestamps do m.save! end
-
==============================
8.때 아닌 대량 가져 오기에, 당신은 should_record_timestamps을 무시할 수 있습니까? 모델에 대한 방법은 updated_at 열을 업데이트 할 때 새로운 검사를 추가 할 수 있습니다.
때 아닌 대량 가져 오기에, 당신은 should_record_timestamps을 무시할 수 있습니까? 모델에 대한 방법은 updated_at 열을 업데이트 할 때 새로운 검사를 추가 할 수 있습니다.
-
==============================
9.다른 답변을 참조하면, 나는 놀랍게도 발견처럼 단일 모델에 대한 타임 스탬프를 사용하지 :
다른 답변을 참조하면, 나는 놀랍게도 발견처럼 단일 모델에 대한 타임 스탬프를 사용하지 :
User.record_timestamps = false
다른 서버에서 실행 내 사전 프로덕션 데이터베이스에 내 개발 데이터베이스 일 수 있지만. 그러나 모든 모델에 대한 경우 I 해제 타임 스탬프를 작동
ActiveRecord::Base.record_timestamps = false
(상황 : 마이그레이션에 created_at 속성을 수정)
-
==============================
10.또는, 스레드 안전을 위해, 참조 : http://www.hungryfools.com/2007/07/turning-off-activerecord-timestamp.html
또는, 스레드 안전을 위해, 참조 : http://www.hungryfools.com/2007/07/turning-off-activerecord-timestamp.html
-
==============================
11.나는 액티브 :: Base.record_timestamps 플래그 변경 아무것도 할 수없는, 그리고 유일한 작업 방법은 액티브 :: Base.no_touching을 {} 사용하고 있습니다 :
나는 액티브 :: Base.record_timestamps 플래그 변경 아무것도 할 수없는, 그리고 유일한 작업 방법은 액티브 :: Base.no_touching을 {} 사용하고 있습니다 :
ActiveRecord::Base.no_touching do Project.first.touch # does nothing Message.first.touch # does nothing end Project.no_touching do Project.first.touch # does nothing Message.first.touch # works, but does not touch the associated project end
여기에서 촬영.
사용자가 created_at 또는 속성 updated_at 의존 또는 그 컬럼을 정렬로 사용하면서, 당신은 깊이 관련 모델의 일부 속성을 재정의해야하고 내부 콜백에 대해 귀찮게하지 않으려는 레이크 작업에 매우 유용합니다.
-
==============================
12.나는 파티에 늦게 해요 그러나 이것은 우리가 내 가게에서 updated_at 업데이트를 생략하는 방법이다 :
나는 파티에 늦게 해요 그러나 이것은 우리가 내 가게에서 updated_at 업데이트를 생략하는 방법이다 :
# config/initializers/no_timestamping.rb module ActiveRecord class Base def update_record_without_timestamping class << self def record_timestamps; false; end end save! class << self remove_method :record_timestamps end end end end
용법:
post.something = 'whatever' post.update_record_without_timestamping
from https://stackoverflow.com/questions/861448/is-there-a-way-to-avoid-automatically-updating-rails-timestamp-fields by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 레일 아래에 WEBrick에서 설정 액세스 제어 - 수 - 원점? (0) | 2020.03.01 |
---|---|
[RUBY-ON-RAILS] 레일 : 액티브 쿼리 협회 값을 기준으로 (0) | 2020.03.01 |
[RUBY-ON-RAILS] 레일에 구축하고 새로운 차이점은 무엇입니까? (0) | 2020.03.01 |
[RUBY-ON-RAILS] 400 잘못된 요청 - 요청 헤더 너무 큰 쿠키 (0) | 2020.03.01 |
[RUBY-ON-RAILS] Gem.source_index는 사용 사양, 사용되지 않습니다. 나는 보석 또는 레일을 다시 설치해야합니까? (0) | 2020.03.01 |