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

时间:2014-08-17 14:34:23

标签: ruby-on-rails-4 model rails-geocoder dirty-data

我有一个地址模型,其中包含以下字段:number, street, city, post_code

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

这是我的地址模型:

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

目前,如果number已更改,地理编码器仅更新Long和Lat。我想要的是,如果number, street, city, post_code中的任何一个发生变化,地理编码器就会运行。这样做的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我从未使用过地理编码器,但如果您只是想要更新属性,那么可以设置after_save回调。

class Address < ActiveRecord::Base
    belongs_to :user

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

    geocoded_by :fulladdress
    after_save :geocode

end

这应该强制它在地址更新时更新,这应该意味着至少有一个属性已经改变,所以不需要检查它们是否不同。