3

ジオコーダーを使用する 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 が返された場合のエラー メッセージを追加したいと思います。このスタックオーバーフロー スレッドでは、before_validation代わりにを使用する必要があることが説明されてafter_validationいますが、ビューを再レンダリングして有効な地理位置情報を入力できるように、どこにエラーを追加すればよいかまだわかりません。

この情報をどこに置くべきかについてのアイデアはありますか? ありがとう!

4

2 に答える 2

0

次のようなものを試してください:

class Tutor < ActiveRecord::Base
  belongs_to :user      

  before_validation :geocode, if: :address_changed?

  validates :user_id, :address, presence: true

  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
    else
      obj.address = nil
    end
  end
end
于 2013-10-08T08:55:19.027 に答える