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