Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:仅当存在另一个字段时才验证该字段_Ruby On Rails_Ruby_Validation_Activerecord - Fatal编程技术网

Ruby on rails Rails:仅当存在另一个字段时才验证该字段

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

我有一个模型,其中有两个字段在技术上可以为null。字段名为
:是否激活
:在
处激活<只有当
: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