0

私はArticleモデルを持ってbelongs_toいるuserので、ここでは以下のように特定の記事のユーザーを見つけています:

article = Article.find(params[:id])
user = User.find(article.user_id)

ご覧のとおり、2 つのクエリでこれを実現していますが、これを 1 つのクエリで実行したいだけです。何をお勧めしますか?tnx。

4

4 に答える 4

2
article = Article.includes(:user).where(:id => params[:id]).first
于 2013-05-28T15:10:26.770 に答える
1

申し訳ありません: 2 つのオブジェクトが必要な場合、Rails では 1 つのクエリでデータを選択する方法はありません。

Articleのデータを選択するとUser同時に、ユーザー固有のデータを非 DB 属性に格納するクエリを作成できますArticle

article = Article.where(id: params[:id]).joins(:user).select('articles.title, users.name').first
puts article.attributes['name']

1 つのクエリですべてのデータを選択しますが、これでは Rails が台無しになります。Userインスタンスは取得できません。

于 2013-05-28T17:26:33.593 に答える
1

はどうjoinですか?

user = User.joins(:articles).where(articles: {id: params[:id]}).first
于 2013-05-28T15:24:58.613 に答える
0

これを試してください:-

article = Article.includes(:user).where("articles.id = ?",  params[:id]).first

article.user のようなユーザーにアクセスできるようになり、他のクエリはトリガーされません。

これは熱心な読み込みとして知られています:-

詳細については、Rails ガイドを参照してください。

http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

以下も参照してください。

http://railscasts.com/episodes/22-eager-loading
http://railscasts.com/episodes/22-eager-loading-revised

于 2013-05-28T15:08:01.647 に答える