2017-04-15 7 views
0

@post = Post.first.comments.build(content: "bla", user: @user)を検索し、@user.commentsで検索すると、何も表示されません。しかし、私が@post.commentsでそれを行うとき、それはコメントを記載します。 @user.comments@post.commentsのコメントを表示するにはどうすればよいですか?Rails 5:via 2モデルでモデルを表示するにはどうすればよいですか?

class Post < ApplicationRecord 
    belongs_to :user 
    has_many :comments  
end 

私のユーザモデル

class User < ApplicationRecord 
    has_many :posts 
    has_many :comments 
end 

コメントモデル

class Comment < ApplicationRecord 
    belongs_to :user 
    belongs_to :post 
end 
+0

'.build'は新しいレコードをインスタンス化するだけで、レコードをDBに保存しません。 '.new'のエイリアスです。だから、 '@ user.comments'を実行すると、データベースに問い合わせるだけで、メモリで作成した新しいレコードは気にしません。 – max

+2

'@comment = Post.first.comments.create(content:" bla "、user:@user);一方、@comment == @ user.comments.last'は、あなたが探しているものを達成します。 – max

+0

thx @maxそれはうまくいったが、なぜ 'build'がうまくいかなかったのか分からない。 – chaosfirebit

答えて

0

ユーザーの投稿に関連付けられているすべての投稿のコメントを取得するためにthroughを使用しています。

class User 
    has_many :posts 
    has_many :comments, through: :posts 
end 
関連する問題