Rails验证基于某些属性的存在

时间:2016-02-08 21:44:54

标签: ruby-on-rails

尝试在模型上创建验证。该模型有两个属性private_keypublic_key。如果用户提供任何一个我想要验证以确保提供另一个。因此,如果他们提供public_key,他们必须提供private_key,反之亦然。现在我有以下内容:

validates_presence_of :public_key if :private_key?
validates_presence_of :private_key if :public_public?

出于某种原因,如果我不提供,我会收到错误。

提前致谢:)

3 个答案:

答案 0 :(得分:2)

使用if类似属性,而不是条件:

validates_presence_of :public_key, if: :private_key?
validates_presence_of :private_key, if: :public_public?

答案 1 :(得分:1)

这可能有效:

validates_presence_of :public_key, if: 'private_key?'
validates_presence_of :private_key, if: 'public_public?'

答案 2 :(得分:0)

您还可以使用验证快捷方式,如果需要,您可以在以后对同一属性进行多次验证:

validates :public_key, presence: true, if: Proc.new { |r| r.private_key.present? }
validates :private_key, presence: true, if: Proc.new { |r| r.public_key.present? }

我更愿意明确地测试属性的存在,例如使用public_key.present?而不是public_key?因为它更具可读性和AFAIK public_key?方法仅适用于布尔字段,除非您定义。