Ruby on rails Rails:仅当存在另一个字段时才验证该字段
我有一个模型,其中有两个字段在技术上可以为null。字段名为Ruby on rails Rails:仅当存在另一个字段时才验证该字段,ruby-on-rails,ruby,validation,activerecord,Ruby On Rails,Ruby,Validation,Activerecord,我有一个模型,其中有两个字段在技术上可以为null。字段名为:是否激活和:在处激活:activated\u at。如果:处于激活状态为false,则不需要出现该选项。在Rails中,将此验证直接设置到ActiveRecord中的适当方式是什么?您可以在:activated\u上的验证器上使用 validates :activated_at, :presence, if: Proc.new { |a| a.is_activated? } 建议阅读: 最后,您应该考虑重命名:ISSUp
:是否激活
和:在
处激活<只有当:is\u activated
设置为true
时,才需要code>:activated\u at。如果:处于激活状态
为false
,则不需要出现该选项。在Rails中,将此验证直接设置到ActiveRecord中的适当方式是什么?您可以在:activated\u上的验证器上使用
validates :activated_at, :presence, if: Proc.new { |a| a.is_activated? }
建议阅读:
最后,您应该考虑重命名<代码>:ISSUp激活的< /C> >简单地<代码>:激活< /代码>。在Rails中,这被认为是更好的实践。
is
前缀在其他语言中用于布尔属性,因为它们的方法名称不支持?
字符。Ruby会,Rails会在布尔属性上生成
方法。因此,最好只调用属性:activated
,并用activated?
检查它。您可以执行以下操作:
validates :activated_at, presence: true, if: :is_activated?
def is_activated?
self.is_activated
end
仅当方法被激活时,才会验证:在
处激活?
返回真
非布尔属性。
如果您没有使用布尔
属性,例如已激活
,并且希望确保在存在另一个非布尔属性时存在一个属性,则可以对其进行简化:
validates :activated_at, presence: true, if: :activated_by?
activated\u by?
将在null
时返回false
,否则返回true