2015-01-05 5 views
0

특정 필드가 업데이트 될 때만 업데이트되는 타임 스탬프 열이 필요합니다. 예를 들어 제품 이름이 변경되면 attributes_updated_at 필드가 Time.now로 업데이트되어야합니다. 외래 키 연관이 추가 된 경우 또는 이 'pending'에서 'active'으로 변경되는 경우 필드를 업데이트하지 않으려합니다.특정 속성이 업데이트 된 경우에만 타임 스탬프를 업데이트하는 방법은 무엇입니까?

모델에서 이것을 간단히 정의 할 수있는 방법이 있습니까?

+0

할 수 있습니다 before_save''에서 간단한 사용 업데이트 있도록 product.status 경우 Model.record_timestamps이 = 거짓 '저장 .changed? || self.association_id.changed?' –

+0

@ RajarshiDas, 좋은 제안 인 것 같습니다. 내가 어떻게 사용할 수 있는지 안내해 줄 수 있니? 클래스 수준 정의입니까? –

+0

사용자 모델에'before_save : stop_update_time_stamps'를 써야하고'def stop_update_time_stamp' 메소드를 작성해야합니다. User.record_timestamps = false product.status.changed? || self.association_id.changed? 끝 '이 –

답변

2

당신은

하자가 당신이 생각 그것을 시도 할 수 Product 모델

class Product < ActiveRecord::Base 
    belongs_to :user 
    before_save :stop_update_time_stamps 

    def stop_update_time_stamp 
    self.class.record_timestamps = false if self.status.changed? || self.user_id.changed? 
    end 
end 
0

귀하의 문제는 데이터베이스 문제이며 루비 문제가 아닌 것으로 생각됩니다.

예를 들어 데이터베이스 트리거 (mysql 코드)를 사용하여 원하는 동작을 얻을 수 있습니다.

CREATE TRIGGER trigger_product AFTER UPDATE ON product 
FOR EACH ROW 
BEGIN 
IF (NEW.name <> OLD.name) or (NEW.category <> OLD.category) 
    THEN set NEW.updated_at = NOW(); 

END; 
+0

이것은 프레임 워크 내에서 문제를 해결하지 못하는 원형 교차 솔루션처럼 보입니다. 나는 그것이 효과가있을 것이라고 생각하지만 DB를위한 트리거를 생성 할 수있는 권한이 없다는 가정하에 작업하고 있습니다. 그래도 감사합니다. –

관련 문제