Как проверить, изменился ли какой-либо атрибут на модели

У меня есть модель адреса, которая содержит поля: 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

На данный момент геокодер обновляет только Long и Lat, если number изменился Я хочу, чтобы геокодер запускался, если number, street, city, post_code менять. Каков наилучший практический способ сделать это?

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

Это должно вынудить его обновляться каждый раз, когда обновляется адрес, что должно означать, что хотя бы один из атрибутов изменился, поэтому нет необходимости проверять, отличаются ли они.

Другие вопросы по тегам