Ruby on rails 验证这些关联中至少一个的存在

Ruby on rails 验证这些关联中至少一个的存在,ruby-on-rails,Ruby On Rails,取款账户记录包含sepa账户,国际账户,PayPalAccount或其他账户。应该至少是其中之一。不能超过一个 class WithdrawalAccount < ActiveRecord::Base has_one :sepa_account has_one :international_account has_one :third_account has_one :fourth_account end class取款帐户

取款账户
记录包含
sepa账户
国际账户
PayPalAccount
其他账户
。应该至少是其中之一。不能超过一个

class WithdrawalAccount < ActiveRecord::Base
  has_one :sepa_account
  has_one :international_account
  has_one :third_account
  has_one :fourth_account
end
class取款帐户
更新问题: 如何在只允许其中一个存在的情况下验证其中一个存在。

尝试:

class WithdrawalAccount < ActiveRecord::Base
  has_one :sepa_account
  has_one :international_account

  validates :sepa_account,          presence: true, if: ->(instance) { instance.international_account.blank? }
  validates :international_account, presence: true, if: ->(instance) { instance.sepa_account.blank? }
end
尝试:

你可以这样做

validate :account_validation

private

def account_validation
  if !(sepa_account.blank? ^ international_account.blank?)
    errors.add_to_base("Specify an Account")
  end
end
这里有答案()

你可以这样做

validate :account_validation

private

def account_validation
  if !(sepa_account.blank? ^ international_account.blank?)
    errors.add_to_base("Specify an Account")
  end
end

这里有答案()

谢谢,请查看更新的答案。在这种情况下,您将如何管理4个值,同时使其更易于阅读?谢谢,请参阅更新的答案。在这种情况下,您如何管理4个值,同时使其更易于阅读?谢谢。您如何确认只有一个可以在场?无论是
sepa\u账户
还是
international\u账户
但只有一个?当有4个属性执行异或时,这似乎有一个缺陷。例如:
nil^true^true^true
返回
true
。如果有人同时推送3种类型的帐户,看起来XOR条件将把它们都考虑在内。这是一个很好的问题。我会仔细研究一下,看看能想出什么来谢谢。您如何确认只有一个可以在场?无论是
sepa\u账户
还是
international\u账户
但只有一个?当有4个属性执行异或时,这似乎有一个缺陷。例如:
nil^true^true^true
返回
true
。如果有人同时推送3种类型的帐户,看起来XOR条件将把它们都考虑在内。这是一个很好的问题。我要深入研究一下,看看能想出什么办法
validate :account_validation

private

def account_validation
  if !(sepa_account.blank? ^ international_account.blank?)
    errors.add_to_base("Specify an Account")
  end
end