我有一个模型Article
,所以在这里我找到了特定文章的用户,如下所示:belongs_to
user
article = Article.find(params[:id])
user = User.find(article.user_id)
如您所见,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么?tnx。
我有一个模型Article
,所以在这里我找到了特定文章的用户,如下所示:belongs_to
user
article = Article.find(params[:id])
user = User.find(article.user_id)
如您所见,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么?tnx。
article = Article.includes(:user).where(:id => params[:id]).first
怎么样join
?
user = User.joins(:articles).where(articles: {id: params[:id]}).first
对不起:只要你想要两个对象,Rails 没有办法一次查询选择数据。
您可以构建一个选择数据的查询,Article
同时User
将用户特定数据存储在类似的非数据库属性Article
中
article = Article.where(id: params[:id]).joins(:user).select('articles.title, users.name').first
puts article.attributes['name']
在一个查询中选择所有数据,但这确实破坏了 Rails。你不会得到一个User
实例。
试试这个: -
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