嵌套模型上的自定义验证错误

时间:2011-03-17 18:29:14

标签: ruby-on-rails

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

1 个答案:

答案 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