2011-10-06 25 views
0

在rails中,可以創建一個函數,每當某個特定屬性發生更改時,rails會執行一個函數。在我的情況下,每次object.address(我有geocoded_by:address和after_validation:geocode)被改變,我想做object.geocode。我在軌道3Rails地理編碼器屬性

回答

0

最好的解決辦法,我認爲將是加載ActiveModel包括::髒你的模型,那麼您可以在回調

class MyModel < ActiveRecord::Base 
    def after_save 
    if address_changed? do 
     #some stuff.. 
    end 
    end 
end 

看到ActiveModel::Dirty

0

對於我檢查最優雅的解決方案是根據是否要將geocoded_by(地址)屬性更改來使用條件驗證。你可以做這樣的事情在你的地理編碼模型的「after_validation」回調,或將其放置在任何活動記錄的回調適合你的目的:

after_validation :geocode, :if => lambda{ |obj| obj.address_changed?}

+0

如果我想檢查2個屬性中的1個是否發生了變化,該怎麼辦? – bcackerman

3

只是傳遞領域的您檢查dirtyness after_validation如

after_validation :geocode, :if => :address_changed? 
+0

如果我想檢查2個屬性中的1個是否發生了變化,該怎麼辦? – bcackerman

+0

只需將符號指向您執行檢查的方法即可 – BSB

相關問題