Ruby on rails 我有两次确认前回拨。哪一个先被处决?

Ruby on rails 我有两次确认前回拨。哪一个先被处决?,ruby-on-rails,validation,Ruby On Rails,Validation,这是我的公司模型,它有地理编码。基本上,我想确保在地理编码方法之前调用add_full_address方法,因为地理编码方法依赖于full_address。我怎样才能让它工作?验证是否按写入顺序运行?我需要在运行验证之前执行这两个操作,因为我想验证纬度和经度列是否已填充,否则。。。我希望保存失败 class Company < ActiveRecord::Base include ActiveModel::Dirty validates :name, :organization,

这是我的公司模型,它有地理编码。基本上,我想确保在地理编码方法之前调用add_full_address方法,因为地理编码方法依赖于full_address。我怎样才能让它工作?验证是否按写入顺序运行?我需要在运行验证之前执行这两个操作,因为我想验证纬度和经度列是否已填充,否则。。。我希望保存失败

class Company < ActiveRecord::Base
  include ActiveModel::Dirty

  validates :name, :organization, :title, :state, :city, presence: true
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i, }

  validates :latitude , numericality: { greater_than_or_equal_to:  -90, less_than_or_equal_to:  90 }
  validates :longitude, numericality: { greater_than_or_equal_to: -180, less_than_or_equal_to: 180 }

  before_validation :add_full_address
  before_validation :geocode, if: ->(obj){(obj.city_changed? || obj.state_changed?)}

  geocoded_by :full_address do |obj, results|
    if geo = results.first
      obj.latitude = geo.latitude
      obj.longitude = geo.longitude
    end
  end

  def add_full_address
    self.full_address = "#{city}, #{state}"
  end

  def d3_coordinates
    slice(:longitude, :latitude)
  end
end
class公司(obj){(obj.city_变更?| | obj.state_变更?}
地理编码人:完整地址do | obj,结果|
如果geo=results.first
对象纬度=地理纬度
obj.longitude=地理经度
结束
结束
def添加完整地址
self.full_address=“#{city},#{state}”
结束
def d3_坐标
切片(:经度,:纬度)
结束
结束

根据文档,验证器按照定义的顺序执行

所有验证前回调都将在任何验证器之前调用。看看这个:这将为您提供所有可以使用的回调。ruby也是一种同步语言,它将自上而下运行,但在本例中,回调当然是在验证之前运行的