我正在尝试找出在何处向使用地理编码器的 Rails 4 应用程序添加验证错误。
我的模型是这样的:
class Tutor < ActiveRecord::Base
belongs_to :user
validates_presence_of :user_id
geocoded_by :address do |obj, results|
if geo = results.first
obj.latitude = geo.latitude
obj.longitude = geo.longitude
obj.country = geo.country
obj.city = geo.city
obj.postalcode = geo.postal_code
obj.address = geo.address
end
end
after_validation :geocode, if: :address_changed?
end
我注意到 if geo = result.first
条件只有在成功找到地址时才会执行。如果返回 nil,我想添加一条错误消息。我看到了 this stackoverflow thread解释说我应该使用 before_validation
而不是 after_validation
,但我仍然不明白在哪里添加错误,以便我的 View 可以重新呈现并且有效的地理位置可以被输入。
我应该把这些信息放在哪里? 谢谢!
最佳答案
您可以像下面这个例子一样在模型中设置以验证地址,本地址更改时,地理编码将只调用一次。在 geocoded_by 方法中,我们明确设置写入纬度和经度,以便在找不到地址时将这些列设置为 nil。
class Company < ActiveRecord::Base
geocoded_by :address do |object, results|
if results.present?
object.latitude = results.first.latitude
object.longitude = results.first.longitude
else
object.latitude = nil
object.longitude = nil
end
end
before_validation :geocode, if: :address_changed?
validates :address, presence: true
validates :found_address_presence
def found_address_presence
if latitude.blank? || longitude.blank?
errors.add(:address, "We couldn't find the address")
end
end
end
关于ruby-on-rails - 使用地理编码器 gem 进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19224733/