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

Ruby on rails 在一个查询中获取对象的用户,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一篇文章模型,它属于一个用户,因此我在这里找到一篇特定文章的用户,如下所示: article = Article.find(params[:id]) user = User.find(article.user_id) 正如您所看到的,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么?tnx.试试这个:- article = Article.includes(:user).where("articles.id = ?", params[:id]).first 现在您

我有一篇
文章
模型,它属于
一个
用户
,因此我在这里找到一篇特定文章的用户,如下所示:

article = Article.find(params[:id])
user = User.find(article.user_id)
正如您所看到的,我通过两个查询实现了这一点,但我只想在一个查询中实现这一点。你推荐什么?tnx.

试试这个:-

article = Article.includes(:user).where("articles.id = ?",  params[:id]).first
现在您可以访问像article.user这样的用户,而不会触发其他查询

这就是所谓的急加载:-

在rails指南上阅读更多关于它的信息

另见:


试试这个:-

article = Article.includes(:user).where("articles.id = ?",  params[:id]).first
现在您可以访问像article.user这样的用户,而不会触发其他查询

这就是所谓的急加载:-

在rails指南上阅读更多关于它的信息

另见:



加入
怎么样

user = User.joins(:articles).where('articles.id = ?', params[:id]).first

加入
怎么样

user = User.joins(:articles).where('articles.id = ?', params[:id]).first

抱歉:只要您需要两个对象,Rails中就无法通过一个查询选择数据

您可以构造一个查询,同时选择
文章
用户
的数据,将特定于用户的数据存储在
文章
的非DB属性中,如

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

在一个查询中选择所有数据,但这确实破坏了Rails。您将无法获得
用户
实例。

抱歉:只要您想要两个对象,Rails中就无法通过一个查询选择数据

您可以构造一个查询,同时选择
文章
用户
的数据,将特定于用户的数据存储在
文章
的非DB属性中,如

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

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

该实例可以工作,但仍将执行两个查询。另一种方法的好处是:
user=user.includes(:articles)。find(user\u id)
这样,即使有多篇文章,也只有两个查询。这仍将执行两个查询。这将起作用,但仍将执行两个查询。另一种方法的好处是:
user=user.includes(:articles)。find(user\u id)
这样即使有几篇文章,也只有两个查询。这仍然会执行两个查询。使用ActiveRecord,您必须执行两个查询才能加载两个模型。正如Alex所说,您必须执行两个查询。我能看到的唯一替代方法是编写一个手动sql查询,但这首先违背了active record的目的。使用ActiveRecord,您必须执行两个查询才能加载两个模型。正如Alex所说,您必须执行两个查询。我所能看到的唯一替代方法是编写一个手动sql查询,但这首先违背了活动记录的目的。他需要一个用户。此外,它仍将运行两个查询。这将返回一个article对象。他需要一个用户。此外,它仍将运行两个查询。这是唯一正确的答案(如果他不需要文章对象)。这是唯一正确的答案(如果他不需要文章对象)。