[英]How to check modified value in a model's before_save callback?
如何讀取控制器在 before_save 回調中設置的值?
例子:
我有一個帶有url
字段的模型。 在保存之前,我想檢查 url 是否已更改。 如果是這樣,請對新舊 url 執行一些操作。
那可能嗎?
更好的方法
before :todo, if: :first_name_or_last_name_changed?
和你的todo
方法
如果它發生了變化,它應該在params
哈希中。 如果它沒有改變,它不應該在那里。 因此,您可以將此自定義處理放入控制器中,或放入執行此操作的模型上的方法中。
如果您真的想在before_save
訪問它,請查看有關 ActiveRecord 回調的文檔,您將看到如何訪問之前和之后的值。
我試過這個東西,但沒有成功
#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
它沒有解決的原因是因為我們設置了 self.field=new_value 所以在 before_save 中它是不可訪問的。 但是 rails 有一些更多的 Active-record 函數,比如field_changed ,可以直接在 before_save 和 after_save 中使用。 所以我最終得到了這個解決方案
#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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.