5

以下に示す関係を考えると:

class Parent < ActiveRecord::Base
  has_many :children, :dependent => :destroy

  accepts_nested_attributes_for :child
end

class Child < ActiveRecord::Base
  belongs_to :parent

  validates :name, :presence => true
end

複数の子を持つ親オブジェクトがあり、そのうちの1つ以上にparent.validを引き起こすエラーがあると仮定しますか?falseを返します。

parent = Parent.new
parent.build_child(:name => "steve")
parent.build_child()
parent.valid?

parent.errorsオブジェクトを見たときにエラーの原因となった子要素にアクセスする方法はありますか?

4

3 に答える 3

1

はい、できます。Parentモデルに追加

validates_associated :children

その後、errorsすべての親の子でメソッドを呼び出して、検証エラーを見つけることができます。子のエラーメッセージを表示するには、このようなものを使用してください

parent = Parent.new
parent.build_child
parent.valid?
parent.children.first.errors.messages
于 2012-09-17T17:18:06.253 に答える
0

ジョンがコメントで示唆したように、私は子供のために親に追加されたエラーを無視し、子供をトラバースして手動でエラーを追加することになりました。この問題は、has_many:throughの関係がいくつかあることで複雑になりましたが、Johnの提案は、私が最終的に使用したものの本質でした。

于 2012-10-29T14:21:10.243 に答える
0

役立つと思うので、ソリューションを追加します。

class Parent < AR
  has_many :children, inverse_of: :parent
  validates_associated :children, message: proc { |_p, meta| children_message(meta) }

  def self.children_message(meta)
    meta[:value][0].errors.full_messages[0]
  end
  private_class_method :children_message
end

class Child < AR
  belongs_to :parent, inverse_of: :children
  validates :name, presence: true
end
于 2017-04-10T14:45:48.313 に答える