以下はコメントとユーザーの関係です。各コメントには1人のユーザーがいるので、以下のコードで結合を構築しています。
結合に特定の列のみを含めるようにこのコードを作成する方法を考えていました。すべてのユーザー情報は必要ありません。ただのfirst_name。助言がありますか。
現在のコード:
@comments = Comment.where(:study_id => @study.id).joins(:user)
以下はコメントとユーザーの関係です。各コメントには1人のユーザーがいるので、以下のコードで結合を構築しています。
結合に特定の列のみを含めるようにこのコードを作成する方法を考えていました。すべてのユーザー情報は必要ありません。ただのfirst_name。助言がありますか。
現在のコード:
@comments = Comment.where(:study_id => @study.id).joins(:user)
次のようなものを使用できます。
@comments = Comment.joins(:user)
.select("comments.*, users.first_name")
.where(study_id: @study.id)
結果の外部列値を取得する方法を示すためにAldoの回答を拡張します。
@comments = \
Comment\
.joins(:user)
.select("comments.*, users.first_name as users_first_name")
.where(study_id: @study.id)
# Now it's stored on each comment as an attribute, e.g.:
puts @comments.first.read_attribute(:users_first_name)
puts @comments.first.attributes['users_first_name']
# Note that inspecting the comment won't show the foreign data
puts @comments.first.inspect # you won't see user's first name output
users_first_name
attr_accessibleを使用して、コメントの属性として宣言することもできます。自動的に設定する魔法の方法はないと思いますが、選択後のループで自分で簡単に設定できます。