6

モデルに関連付けられている列だけでなく、2つのテーブルを結合してすべての列を返そうとしています。

私はそのようなものを持っています:

Comment.joins(:user).select("*")

SQLは問題ないように見えますが、それでも、コメントのみが返され、それに関連付けられているユーザー情報は返されません。

*だけでなく、どうすれば取得できますcomments.*か?

4

4 に答える 4

8

どうですか

comments = Comment.includes(:user).all

これで配列になりますcommentsので、すべてのユーザーを表示するには、配列をループする必要があります。

#won't work
comments.user 

#should work
comments[0].user

comments.each do |comment|
    puts comment.user.name #or whatever
end
于 2010-11-28T06:00:47.793 に答える
2

これは機能するはずです:

comments = Comment.joins(:user).includes(:user)

しかし、これが起こっていると私が思うことです。コンソールウィンドウで出力を表示している場合、コンソール出力は返されたルートレベルのオブジェクトのみを反映/検査すると思います。

上記のコードを実行した実験をしました。端末出力は、コメントをフェッチしたことを記録しましたが、関連するユーザーについては言及していませんでした。次に、データベースに対して2番目のクエリを実行できないようにデータベースをシャットダウンしてから、関連付けられたユーザーを要求します。

comments.user

コンソールはユーザーを出力します。これは、データベース接続が試行されなかったため、ユーザーがすでに熱心にロードされていることを示しています。

于 2010-11-27T16:21:03.377 に答える
1

Comment.select('*')。includes(:user)

于 2010-11-27T15:20:44.447 に答える
1

Ryan Batesは、このテーマに関する優れたチュートリアルを持っています。

http://railscasts.com/episodes/22-eager-loading-revised?autoplay=true

于 2013-10-09T17:42:24.457 に答える