2012-09-17 11 views
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 

は、我々はparent.validを引き起こすエラーを有する1つまたは複数のその複数の子を持つ親オブジェクトを持っていると仮定しましょうか? falseを返す。

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

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

+1

あなたは子供たちに目を通すことができ... –

答えて

0

を表示するには、このような何か、私が子供の親に追加されたエラーを無視して子供を横断し、手動でエラーを追加することになりました。問題は、カップルhas_manyを持つことによって複雑になりました。関係を通して、ジョンの提案は、私が使い終わったものの本質でした。私はそれが参考に願っていますように私のソリューションを追加

+0

あなたが気にしない場合、あなたは子オブジェクトのためのエラーを無視する方法を示していますができますか? – Mohamad

+0

@モハマド私はエラーの二次ハッシュを作成していたので、子供のエラーを無視するのは、すべてのエラーを無視するという単純なものでした。ここで、key.split( '。')。size> 1 – biagidp

1

はい、できます。その後、あなたのParentモデル

validates_associated :children 

に追加あなたは検証エラーを見つけるために、すべての親の子にerrorsメソッドを呼び出すことができます。ジョンはコメントで示唆したように、子のエラーメッセージ

parent = Parent.new 
parent.build_child 
parent.valid? 
parent.children.first.errors.messages 
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 
関連する問題