class Parent
has_one :child
accepts_nested_attributes_for :child
end
class Child
belongs_to :parent
end
使用嵌套对象表单,我需要为子模型添加一些额外的验证。这些并不总是在Child上运行,所以我不能将它们放在Child中的validate
方法中。在Parent中的validate方法中进行检查似乎很明智,但是我无法正确添加错误消息。
这确实有效:
class Parent
...
def validate
errors[ :"child.fieldname" ] = "Don't be blank!"
end
但我们失去了很好的东西,比如I18n和CSS在错误字段上突出显示。
这不起作用:
def validate
errors.add :"child.fieldname", :blank
end
答案 0 :(得分:1)
您应该将它们保存在子模型中,因为那是经过验证的模型,但是,您可以使用if:
和unless:
设置条件
class Order < ActiveRecord::Base
validates :card_number, presence: true, if: :paid_with_card?
def paid_with_card?
payment_type == "card"
end
end
您可以对此进行多种修改,请参阅rails文档http://edgeguides.rubyonrails.org/active_record_validations.html#conditional-validation
中的更多内容我猜你可以为child添加一个属性created_by
,并让Child根据那个选择使用哪些验证。你可以像在答案中那样做:Rails how to set a temporary variable that's not a database field