2016-09-29 7 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) Вы получаете ошибку, потому что вы вызываете body в коллекцию комментариев, а не один экземпляр класса Comment.

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