2013-10-13 58 views
2

我在我的模型中得到了未定义的方法,但我相信我拥有它。方法未在模型中定义?

class Business < ActiveRecord::Base 
    attr_accessible :user_id, :name, :city, :state, :zip, :street, :latitude, :longitude 

    def new_address 
    [street, city, state, zip].join(', ') 
    end 
    geocoded_by :new_address 
    after_validation :geocode, :if => :new_address_changed? 

end 

我收到了未定义的方法错误new_address_changed?这是错误的吗?

回答

3

*_changed?方法仅适用于活动记录属性,不适用于用户定义的方法。为你,street_changed?等将工作。

最好的出路是定义另一个方法,像这样:

def address_changed? 
    street_changed? || city_changed? || state_changed? || zip_changed? 
end 
+0

噢噢噢,会是什么替代如果'new_address'改变了? – hellomello

+0

那么,你将不得不自己定义'address_changed?'方法,并检查其中的单个字段更改。 – pungoyal

2

,你可以通过你自己的定义method,如new_addressactive_record属性:

def new_address_changed? 
    street_changed? || city_changed? || state_changed? || zip_changed? 
end