Rails验证存在两个字段之一(XOR)

时间:2016-09-23 19:57:12

标签: ruby-on-rails

如何验证这些值中的任何一个是否存在,而不是两者都存在?

  validates_presence_of :client_id, message: 'Please enter a value'
  validates_presence_of :agency_id, message: 'Please enter a value'

我查看了导轨指南,我认为我需要使用条件验证,但我仍然有点卡住了。

2 个答案:

答案 0 :(得分:6)

试试这个

int my_vl_k(int normalized_feat_set, int k);

如果要包含错误消息,可以执行

validates :client_id, presence: true, unless: :agency_id
validates :agency_id, presence: true, unless: :client_id

您可以阅读有关validation messages

的更多信息

答案 1 :(得分:2)

如果使用除非语法,则会出现2个错误:一个是client_id,一个是agency_id,如果两个都是Nil。

如果只需要一个错误,则需要自定义方法。 Guides: ActiveRecord Validation

validate :client_or_agency

def client_or_agency
  errors.add(:client_id, "Either Client or Agency needs a value") unless client_id.present? || agency_id.present?
end