2016-11-15 21 views
0

私は2つのモデルを次のように関連付けました。Rails 5 - Activerecordの関連付けクエリ

class Comment < ApplicationRecord 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :comments 
end 

レコードクエリ

comments_list = Comment.where(:post_id => post_id, :is_delete => false).joins(:user).select('comments.*,users.*') 

は、ロガーで、次のmysqlのクエリを生成します

SELECT comments.*,users.* FROM `comments` INNER JOIN `users` ON `users`.`id` = `comments`.`user_id` WHERE `comments`.`post_id` = '81' AND `comments`.`is_delete` = 0. 

に続き、これは非常にligitimateクエリを生成しますが、comments_listオブジェクトはコメントだけのテーブルから列を含んでいるようです。

おかげ

答えて

1

それはあなたがしなければならないすべてはinclude(:user)からのユーザーである、あなたはコメントの隣にユーザー名を表示したい場合は、MERT B.の答えは結構です、あなたが何をしたいかによって異なります

comments_list = Comment.where(:post_id => post_id, :is_delete => false).joins(:user).select('comments.*,users.*') 
comments_list.each do |comment| 
    puts "#{comment.text} by #{comment.user.name}" 
end 

それともあなたは少なくとも一つのコメントを持っているユーザーだけが欲しいならば、あなたは常にコメントテーブルの上にuser_idsからユーザーを選択することができます:あなたはこのような何かをするとき、コメントリストは、に沿って取得されます

User.where(id: Comment.select(:user_id)) 
+0

はい@Macelo Risoli - 感謝しました。これは、コントローラでこのクエリを実行してクライアント(ブラウザ)に応答を返し、ループを繰り返して別のハッシュを構築する場合、結果を変換する必要があることを意味します。 – user3775217

+0

最初の回答 - 最後のpara http://stackoverflow.com/questions/19175084/activerecord-query-through-multiple-joins – user3775217

関連する問題