2013-02-14 70 views
0

我試圖避免讓我的模型在保存時未設置任何更改時設置updated_at屬性。通過調試過程,我注意到'changed'數組列出了一個屬性,我知道這個屬性實際上並沒有從表單中改變。該屬性確實有讀者方法。該方法給出的結果與當前狀態不同。有沒有辦法手動清除閱讀器方法中該屬性上的「更改」標誌?在屬性讀取器方法上設置Rails activerecord髒標記

Wine.rb

before_save :check_for_changes 

def blends 
    if read_attribute(:blends).nil? 
    "100% #{ name.split(" ").map { |w| varietals.include?(w.downcase) ? w : nil }.compact.join(" ") }" 
    else 
    read_attribute(:blends) 
    end 
end 

def check_for_changes 
    return changed? 
end 

基本上 '共混物' 的方法拍攝出 「100%[品種名稱]」 如果沒有任何共混物%的上市。這顯然干擾了'更改'標誌...

回答

0

我避免重寫字段讀取器,因爲這使我無法直接訪問存儲在數據庫中的值(即無需調用read_attribute)以獲取其他邏輯。這很麻煩,當你需要檢查數據庫中是否存儲了實際的值,或者遇到存儲值時的情況,但它也是「100%一些品種」的格式,因爲我認爲如果你有這是一個表單字段。

我通常添加一些像這樣代替:

def blends_description 
    if blends.nil? 
    "100% #{ name.split(" ").map { |w| varietals.include?(w.downcase) ? w : nil }.compact.join(" ") }" 
    else 
    blends 
    end 
end 
+0

晚發表評論,但如果你用'自我[ATTR]'和'自[ATTR覆蓋您可以參考「真實」的屬性的屬性] =' – 244an 2017-11-28 21:28:27

相關問題