tôi đã cố gắng điều này, nhưng nó đã không làm việc ra
#Non-working code
before_save: record_old_value
after_save: record_change
def record_old_value
@old_value = self.field
end
def record_change
if @old_value==self.field
create_record_in_history :old_value => @old_value, :new_value => self.field
end
end
Lý do nó đã không làm việc là bởi vì chúng tôi đặt self.field = new_value vì vậy trong before_save nó không thể truy cập được. Nhưng đường ray có một số chức năng Active-record hơn như field_changed có thể được sử dụng trực tiếp trong cả before_save và after_save. Vì vậy, tôi đã kết thúc với giải pháp này
#working code
after_save :run_function
def run_function
@old_value = field_was
if @old_value==self.field
create_record_in_history :old_value => @old_value, :new_value => self.field
end
end
Nguồn
2014-04-11 06:13:25
Cảm ơn bạn đã thay đổi quyết định và khôi phục câu trả lời của mình, đây là phương pháp phù hợp. Đặc biệt, các phương thức 'url_changed?', 'Url_was' và' url_change' được quan tâm. –
Tôi đã sử dụng paper_trail để thực hiện việc này. – Jacob