Validates_overlap自定义消息?

时间:2017-03-07 12:58:45

标签: ruby-on-rails ruby validates-associated

我尝试了gem validates_operator。 我需要为此验证自定义我的消息:

  

验证:arrival_date,:departure_date,overlap:{
  范围: “place_id”,
  message_title:“错误”,
  message_content:“无法为此日期预订此地点”}

但我有简单形式的默认消息:“请查看下面的问题”

未来的答案。

1 个答案:

答案 0 :(得分:1)

您还可以创建验证模型状态的方法,并在错误集合无效时将其添加到错误集合中。然后,您必须使用validate(API)类方法注册这些方法,并传入验证方法的符号。名。

您可以为每个类方法传递多个符号,相应的验证将按照注册时的顺序运行。

有效吗?方法将验证错误集合是否为空,因此当您希望验证失败时,您的自定义验证方法应该向其添加错误:

class Invoice < ApplicationRecord
  validate :expiration_date_cannot_be_in_the_past,
    :discount_cannot_be_greater_than_total_value

  def expiration_date_cannot_be_in_the_past
    if expiration_date.present? && expiration_date < Date.today
      errors.add(:expiration_date, "can't be in the past")
    end
  end

  def discount_cannot_be_greater_than_total_value
    if discount > total_value
      errors.add(:discount, "can't be greater than total value")
    end
  end
end

默认情况下,每次调用有效时都会运行此类验证吗?或保存对象。但是也可以通过为validate方法提供:on选项来控制何时运行这些自定义验证,使用:: create或:update。

class Invoice < ApplicationRecord
  validate :active_customer, on: :create

  def active_customer
    errors.add(:customer_id, "is not active") unless customer.active?
  end
end