Rails:使用条件验证has_many至少一个

时间:2018-10-13 21:25:35

标签: ruby-on-rails validation

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

2 个答案:

答案 0 :(得分:0)

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

validate:active

然后在模型中定义一个私有的 active 方法

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

答案 1 :(得分:0)

也许我不太了解您要归档的内容。 您是否使用ActiveRecord :: NestedAttributes尝试了此操作?

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

也许您想在A中设置一些标志-通过更新B来触发。 这可以通过使用回调方法来完成: https://guides.rubyonrails.org/active_record_callbacks.html

或者,如果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