Передача определенного метода, если атрибут не присутствует? - PullRequest
1 голос
/ 16 декабря 2011

Проблемы с новичком, заставляющие его работать. У меня есть магазины, у которых нет адресов (просто website), поэтому гем ( Google-Maps-for-Rails ) при заполнении фактически не создает их вообще, а только с address.

Store.rb

validates :address, 
          :presence => {:unless => :website, 
          :message => "You must enter an address, website, or both."}

acts_as_gmappable :check_process => :prevent_geocoding,
                  :address => "address", 
                  :normalized_address => "address",
                  :msg => "Sorry, unable to find address."


# How do I correct this block?
def prevent_geocoding
  unless website.present? 
   address.blank? || (!latitude.blank? && !longitude.blank?)
  end
end

Я все еще хочу использовать все здесь, но как правильно пройти этот блок?

Спасибо.

1 Ответ

2 голосов
/ 16 декабря 2011

Вы на правильном пути.Вы можете обойти проверки, передав метод в if или unless в качестве параметров проверки.В приведенном выше коде вы передаете его в качестве опции для средства проверки присутствия, а не для самой проверки.Переместите исключение из хеша и передайте ему имя метода или Proc - на самом деле все, что возвращает истину или ложь.Вот пример:

validates :address, 
          :presence => { :message => "You must enter an address, website, or both." },
          :unless => Proc.new { |store| store.address.nil? && store.website.present? }

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

...