Ruby on rails Rails验证和自定义回调排序

Ruby on rails Rails验证和自定义回调排序,ruby-on-rails,validation,Ruby On Rails,Validation,我对我的一个模型进行了以下验证。目标是验证名、姓和店铺是否存在。然后在验证之后(但仍然在验证之前),我想运行我的自定义验证:status validates_presence_of :first_name validates_presence_of :last_name validates_presence_of :shop validate :status, :on => :create def status do stuff with first_name an

我对我的一个模型进行了以下验证。目标是验证名、姓和店铺是否存在。然后在验证之后(但仍然在验证之前),我想运行我的自定义验证:status

  validates_presence_of :first_name
  validates_presence_of :last_name
  validates_presence_of :shop

  validate :status, :on => :create

def status
  do stuff with first_name and last_name
end

但似乎:status在其他验证之前运行,因此我收到了nil first_name等错误。如何更正此错误?

如果您不希望在其他验证返回为无效时运行自定义验证,请执行以下操作:

def status
  return if errors.present?
  do stuff with first_name and last_name
end

我会尽力帮忙的。如果
status
是表中的一个字段,则必须更改自定义验证名称。比如说

validates_presence_of :first_name
validates_presence_of :last_name
validates_presence_of :shop

validate :check_status, :on => :create

def check_status
  if first_name.present? && last_name.present? && shop.present?
    do stuff with first_name and last_name
    errors.add(:status, "you message here.") // if you need a error message
  end
end

如需更多信息,请点击此处。希望它能帮助您

为什么需要按顺序运行它们?FWIW Rails每次都会运行所有验证,即使其中一个已经失败了。