Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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:Validate至少有一个具有条件_Ruby On Rails_Validation - Fatal编程技术网

Ruby on rails Rails:Validate至少有一个具有条件

Ruby on rails Rails:Validate至少有一个具有条件,ruby-on-rails,validation,Ruby On Rails,Validation,我有一个模型a有很多B。我想验证a是否至少有一个B的活动字段设置为true。当B是更新的模型时,我如何向A添加自定义验证以强制执行此操作?有几种方法,最简单的方法是通过模型中的验证,例如: 验证:活动 然后在模型中定义一个私有活动方法 def active *enter logic that define attributes required to be validated* end 也许我不太明白你到底想做什么。 您是否使用ActiveRecord::NestedAttribute尝试过

我有一个模型a有很多B。我想验证a是否至少有一个B的活动字段设置为true。当B是更新的模型时,我如何向A添加自定义验证以强制执行此操作?

有几种方法,最简单的方法是通过模型中的验证,例如:

验证:活动

然后在模型中定义一个私有活动方法

def active
*enter logic that define attributes required to be validated*
end 

也许我不太明白你到底想做什么。 您是否使用ActiveRecord::NestedAttribute尝试过此操作

如果你只是更新B-B将被验证。您可以阻止保存B-但不能保存A

也许您喜欢通过更新B在A-triggert中设置一些标志。 这可以通过使用回调方法来实现:

或者,如果A没有其他活动B,则可以将B标记为无效

诸如此类:

validate :your_custom_validation_for_b
def your_custom_validation_for_b
  unless self.your_model_a.your_model_b.where(active: true).exists?
    errors.add(:active, "at least this B for A should be active")
  end
end  
有多个:b,->{whereb.active=?,true},:class\u name=>b