在一个查询中获取对象的用户

时间:2013-05-28 14:56:54

标签: ruby-on-rails ruby activerecord

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

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

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

4 个答案:

答案 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就无法通过一个查询选择数据。

您可以构建一个同时选择ArticleUser数据的查询,将用户特定数据存储在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