Атрибут геокодера Rails - PullRequest
       18

Атрибут геокодера Rails

0 голосов
/ 06 октября 2011

В rails можно создать функцию, которая при каждом изменении определенного атрибута выполняет функцию. В моем случае, каждый раз, когда object.address (у меня есть geocoded_by: address и after_validation: geocode), я хочу сделать object.geocode. Я на рельсах 3

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

Просто передайте поле, чтобы проверить, нет ли в вас загрязнения после_проверки, как в

after_validation :geocode, :if => :address_changed?
0 голосов
/ 18 января 2012

Для меня наиболее элегантным решением является использование условной проверки, основанной на том, был ли изменен атрибут geocoded_by (адрес).Вы можете сделать что-то подобное в обратном вызове "after_validation" модели, которую вы геокодируете, или поместить ее в любой обратный вызов Active Record, соответствующий вашим целям:

after_validation :geocode, :if => lambda{ |obj| obj.address_changed?}

0 голосов
/ 06 октября 2011

Лучшим решением, я думаю, было бы включение ActiveModel :: Dirty в вашу модель, тогда вы можете проверить это в обратном вызове

class MyModel < ActiveRecord::Base
  def after_save
     if address_changed? do
       #some stuff..
     end
  end
end

см. ActiveModel :: Dirty

...