У меня есть приложение Rails, которое перечисляет информацию о локальных сервисах. Мои цели для этой модели следующие: 1. Заполнить поля name и tag_list. 2. Заполните одно или несколько полей для бесплатного телефона, телефона, телефона2, мобильного телефона, факса, электронной почты или веб-сайта. 3. Если поле paddress имеет значение, закодируйте его с помощью плагина Geokit. Вот моя модель entry.rb:
class Entry < ActiveRecord::Base
validates_presence_of :name, :tag_list
validates_presence_of :tollfreephone or :phone or :phone2 or :mobile or :fax or :email or :website
acts_as_taggable_on :tags
acts_as_mappable :auto_geocode=>{:field=>:paddress, :error_message=>'Could not geocode physical address'}
before_save :geocode_paddress
validate :required_info
def required_info
unless phone or phone2 or tollfreephone or mobile or fax or email or website
errors.add_to_base "Please have at least one form of contact information."
end
end
private
def geocode_paddress
#if paddress_changed?
geo=Geokit::Geocoders::MultiGeocoder.geocode (paddress)
errors.add(:paddress, "Could not Geocode address") if !
geo.success
self.lat, self.lng = geo.lat,geo.lng if geo.success
#end
end
end
Требуется работа с именем и tag_list, но не требуется одно (или более) из полей tollfreephone, phone, phone2, mobile, fax, email или website.
Что касается кодирования с Geokit, чтобы сохранить запись с моделью, я должен ввести адрес. Какое поведение я не хочу. Я бы хотел, чтобы оно не требовало поля paddress, но если поле paddress имеет значение, оно должно кодировать геокод. Как есть, он всегда пытается геокодировать входящую запись. Закомментированное "если paddress_changed?" не работал, и я не мог найти что-то вроде "если paddress_exists?" это будет работать.
Помощь с любым из этих вопросов будет принята с благодарностью. Я опубликовал три вопроса, относящихся к моей модели, потому что я не уверен, мешают ли они друг другу работать. Спасибо за чтение моих вопросов.