我有一个Article
模型,belongs_to
一个user
所以我在这里找到一个特定文章的用户,如下所示:
article = Article.find(params[:id])
user = User.find(article.user_id)
如您所见,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么? TNX。
答案 0 :(得分:2)
article = Article.includes(:user).where(:id => params[:id]).first
答案 1 :(得分:1)
join
怎么样?
user = User.joins(:articles).where('articles.id = ?', params[:id]).first
答案 2 :(得分: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
个实例。
答案 3 :(得分: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