Sql 返回活动记录中包含的多个模型

Sql 返回活动记录中包含的多个模型,sql,ruby-on-rails,ruby-on-rails-3,rails-activerecord,Sql,Ruby On Rails,Ruby On Rails 3,Rails Activerecord,我有两种型号,邀请函和RSVP。一个邀请有许多rsvp,rsvp属于一个邀请。我想运行一个查询,返回所有邀请以及属于每个邀请的RSVP。我想拥有属于邀请和rsvp的所有属性。我知道包括,并一直在尝试类似的事情 @results = RSVP.where(user_id: 3).includes(:invitation) 但我只返回了RSVP的属性。理想情况下,我希望将RSVP所属邀请的属性添加到结果中。我遗漏了什么概念,或者我应该以不同的方式来思考这个问题?RSVP。其中(…)带或不带incl

我有两种型号,邀请函和RSVP。一个邀请有许多rsvp,rsvp属于一个邀请。我想运行一个查询,返回所有邀请以及属于每个邀请的RSVP。我想拥有属于邀请和rsvp的所有属性。我知道包括,并一直在尝试类似的事情

@results = RSVP.where(user_id: 3).includes(:invitation)
但我只返回了RSVP的属性。理想情况下,我希望将RSVP所属邀请的属性添加到结果中。我遗漏了什么概念,或者我应该以不同的方式来思考这个问题?

RSVP。其中(…)
带或不带
includes(…)
将返回
RSVP
对象的集合。通过包含每个
RSVP
:invitation
关联,您可以立即为集合中的每个
RSVP
加载
:invitation
。这可以防止在引用集合中的每个
RSVP
关联时,为其运行单独的
SELECT*FROM investments…
查询

如果计划对集合中的对象使用关联,
.includes
只不过是查询优化。它不会将关联中的属性合并到结果集中的模型实例中

如果希望在
RSVP
实例上包含关联的
Invitation
属性,可以使用Rails
delegate
方法。您可以阅读有关它的信息

在您的
RSVP
模型上,您可以这样做,从
Invitation
中列出所需的属性,以代替我在下面留下的占位符

class RSVP < ActiveRecord::Base

  has_one :invitation

  delegate :some_invitation_attribute, :another_invitation_attribute, to: :invitation
RSVP。其中(…)
带或不带
包含(…)
将返回
RSVP
对象的集合。通过包含每个
RSVP
:invitation
关联,您可以立即为集合中的每个
RSVP
加载
:invitation
。这可以防止在引用集合中的每个
RSVP
关联时,为其运行单独的
SELECT*FROM investments…
查询

如果计划对集合中的对象使用关联,
.includes
只不过是查询优化。它不会将关联中的属性合并到结果集中的模型实例中

如果希望在
RSVP
实例上包含关联的
Invitation
属性,可以使用Rails
delegate
方法。您可以阅读有关它的信息

在您的
RSVP
模型上,您可以这样做,从
Invitation
中列出所需的属性,以代替我在下面留下的占位符

class RSVP < ActiveRecord::Base

  has_one :invitation

  delegate :some_invitation_attribute, :another_invitation_attribute, to: :invitation

假设
邀请
模型有两个字段
事件名称
事件日期
,您希望在查询结果中访问这两个字段。如果提供一个
joins
子句,则可以自定义选择列表

RSVP.select("rsvps.*, invitations.event_name invitation_event_name, 
  invitations.event_date invitation_event_date"
).where(user_id: 3).joins(:invitation).each do |rsvp|    
  puts rsvp.invitation_event_name, rsvp.invitation_event_date
end

假设
邀请
模型有两个字段
事件名称
事件日期
,您希望在查询结果中访问这两个字段。如果提供一个
joins
子句,则可以自定义选择列表

RSVP.select("rsvps.*, invitations.event_name invitation_event_name, 
  invitations.event_date invitation_event_date"
).where(user_id: 3).joins(:invitation).each do |rsvp|    
  puts rsvp.invitation_event_name, rsvp.invitation_event_date
end

很遗憾,我仍然没有从查询结果接收到邀请属性。很遗憾,我仍然没有从查询结果接收到邀请属性。当我运行
RSVP.select(“rsvps.*,invitations.event\u name invitation\u event\u name,invitations.event\u date invitation\u event\u date”)。其中(用户id:3)。加入(:invitation)
,我没有在查询结果中获取邀请字段。我不知道为什么它不起作用。但它会返回rsvp中的所有字段。在控制台中打印对象时,属性不会显示。您是否尝试显式访问它们?i、 e.
rsvp.邀请\活动\名称
Ahh。我现在明白了。它起作用了。为什么它不显示在Rails控制台中?在控制台中,AR
inspect
方法用于显示对象。该方法仅列出模型表中的字段。即使对象具有查询结果中的动态属性。查看源代码了解更多详细信息:谢谢。非常感谢。当我运行
RSVP.select(“rsvps.*,invitations.event\u name invitation\u event\u name,invitations.event\u date invitation\u event\u date”)。where(user\u id:3).joins(:invitation)
,我在查询结果中不会得到邀请字段。我不知道为什么它不起作用。但它会返回rsvp中的所有字段。在控制台中打印对象时,属性不会显示。您是否尝试显式访问它们?i、 e.
rsvp.邀请\活动\名称
Ahh。我现在明白了。它起作用了。为什么它不显示在Rails控制台中?在控制台中,AR
inspect
方法用于显示对象。该方法仅列出模型表中的字段。即使对象具有查询结果中的动态属性。查看源代码了解更多详细信息:谢谢。非常感谢。