2016-09-29 18 views
1

私は多くのコメントを持つ投稿を持っています。コメントは、本体とあなたは私がコメントを持っているポストから身体属性を取得しようと、私はノーメソッドの例外を取得することがわかります上記のコードでタイトル関連オブジェクトの属性の取得

=> #<ActiveRecord::Associations::CollectionProxy [#<Comment id: 1, author: "jack", body: "how do you like dem apples?", post_id: 1, created_at: "2016-09-29 02:11:00", updated_at: "2016-09-29 02:11:00">]> 
2.3.0 :005 > Post.first.comments 
    Post Load (0.5ms) SELECT "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT 1 
    Comment Load (0.2ms) SELECT "comments".* FROM "comments" WHERE "comments"."post_id" = ? [["post_id", 1]] 
=> #<ActiveRecord::Associations::CollectionProxy [#<Comment id: 1, author: "jack", body: "how do you like dem apples?", post_id: 1, created_at: "2016-09-29 02:11:00", updated_at: "2016-09-29 02:11:00">]> 
2.3.0 :006 > Post.first.comments.body 

NoMethodError: Comment Load (0.2ms) SELECT "comments".* FROM "comments" WHERE "comments"."post_id" = ? [["post_id", 1]] 
undefined method `body' for #<Comment::ActiveRecord_Associations_CollectionProxy:0x007f9bef0a33a8> 

を持っています。このような状況で関連するオブジェクトデータを取得するにはどうすればよいですか?

答えて

1

1)Commentクラスの1つのインスタンスではなく、コメントのコレクションでbodyを呼び出しているため、エラーが発生します。それは働いて得るために

2):

# select the comment, which's body you want to get 
Post.first.comments.first.body 

Post.first.commentsは、あなたが配列として扱い、すべてのコメントの体を得るために、例えば、それをマッピングすることができ、コレクションです:

# would return all bodies of all comments, that belongs to the `Post.first` 
Post.first.comments.pluck(:body) 

常に例外メッセージを注意深く読みます。

+0

おかげでAndrey !! – adamscott

関連する問題