Ruby on rails 4 如何检查模型上是否有任何属性已更改

Ruby on rails 4 如何检查模型上是否有任何属性已更改,ruby-on-rails-4,model,rails-geocoder,dirty-data,Ruby On Rails 4,Model,Rails Geocoder,Dirty Data,我有一个地址模型,其中包含以下字段:number、street、city、post\u code 我使用一个名为fulladdress的方法将所有字段插入到一个字段中,然后将其传递给geocoder,geocoder返回地址的经度和纬度 这是我的地址模型: class Address < ActiveRecord::Base belongs_to :user def fulladdress "#{number} #{street}, #{city}, #{

我有一个地址模型,其中包含以下字段:
number、street、city、post\u code

我使用一个名为
fulladdress
的方法将所有字段插入到一个字段中,然后将其传递给geocoder,geocoder返回地址的经度和纬度

这是我的地址模型:

class Address < ActiveRecord::Base
    belongs_to :user

    def fulladdress
        "#{number} #{street}, #{city}, #{post_code}"
    end

    geocoded_by :fulladdress
    after_validation :geocode, :if => :number_changed?

end
类地址:编号\u是否更改?
结束

目前,geocoder仅在
number
发生变化时更新Long和Lat。我想让geocoder在编号、街道、城市、邮政编码发生变化时运行。这样做的最佳实践方式是什么

我从未使用过geocoder,但如果您只想在属性更改时更新某些内容,您可以在保存后设置
回调

class Address < ActiveRecord::Base
    belongs_to :user

    def fulladdress
        "#{number} #{street}, #{city}, #{post_code}"
    end

    geocoded_by :fulladdress
    after_save :geocode

end
类地址

这将迫使它在地址更新时进行更新,这意味着至少有一个属性已更改,因此无需检查它们是否不同。

我认为这不适用于地理编码,因为地理编码采用
:fulladdress
并计算地址的纬度和经度,并在地址上填写字段
:latitude
:longitude
模型当代码如上所述更改时,纬度和经度字段在保存时保持为空。如果我在验证后将其保留为
:geocode
,那么它可以工作,但是我感兴趣的是,只有当地址对象上的字段发生更改时,您才能运行geocode。因为地址只有
:fulladdress
中的字段,所以我不理解这个问题。每次模型保存、更新或验证时,表示
:fulladdress
中的一个字段已更改。除非地址模型有更多未显示的字段?