1

フィールドを含む Address モデルがあります: number, street, city, post_code

すべてのフィールドを 1 つに補間するために呼び出されるメソッドを使用します。このメソッドは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が変更された場合にのみ更新します。私が望むのは、ジオコーダーがnumber, street, city, post_code変更された場合に実行されることです。これを行うためのベストプラクティスの方法は何ですか?

4

1 に答える 1

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

これにより、住所が更新されるたびに強制的に更新されます。つまり、少なくとも 1 つの属性が変更されているため、それらが異なるかどうかを確認する必要はありません。

于 2014-08-17T17:10:26.700 に答える