0

我有一个模型Article,所以在这里我找到了特定文章的用户,如下所示:belongs_touser

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

如您所见,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么?tnx。

4

4 回答 4

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

怎么样join

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

对不起:只要你想要两个对象,Rails 没有办法一次查询选择数据。

您可以构建一个选择数据的查询,Article同时User将用户特定数据存储在类似的非数据库属性Article

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

在一个查询中选择所有数据,但这确实破坏了 Rails。你不会得到一个User实例。

于 2013-05-28T17:26:33.593 回答
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 回答