Как проверить, изменился ли какой-либо атрибут на модели
У меня есть модель адреса, которая содержит поля: 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
Это должно вынудить его обновляться каждый раз, когда обновляется адрес, что должно означать, что хотя бы один из атрибутов изменился, поэтому нет необходимости проверять, отличаются ли они.