首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:获取关联关联

Rails:获取关联关联
EN

Stack Overflow用户
提问于 2019-08-15 07:25:17
回答 1查看 146关注 0票数 0

假设我有以下关联:

代码语言:javascript
复制
class Player
  has_many :team_members
  has_many :teams, through: :team_members, dependent: :destroy

  has_many :invites, class_name: 'Invitation', as: :invitee
end

class Team
  has_many :team_members
  has_many :players, through: :team_members, dependent: :destroy

  has_many :invites, class_name: 'Invitation', as: 'invitee' 
  has_many :invitations, as: :inviter
end

class Invitation
  belongs_to :inviter, polymorphic: true, optional: true
  belongs_to :invitee, polymorphic: true, optional: true
end

基本上,TeamPlayer都可以被邀请,比方说,一个游戏,一个Player创建并拥有一个团队。因此,当Player登录时,我希望显示Player收到的邀请以及该Player拥有的任何Team收到的任何邀请。

我正在寻找类似这样的东西:

代码语言:javascript
复制
player = Player.first
player.invites << player.teams.invites

但是我不能这样做,因为player.teams.invites返回了一个不匹配的类型,因为它返回的是Team而不是Invitation

在最少的查询次数中返回关联和关联关联的有效方法是什么?我知道我可以写一个循环,但我想知道是否有更优雅的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-15 08:02:04

如果我是你,我想我会这样做:

代码语言:javascript
复制
class Invitation
  belongs_to :inviter, polymorphic: true, optional: true
  belongs_to :invitee, polymorphic: true, optional: true

  class << self

    def for_teams(teams)
      where(invitee_type: 'Team', invitee_id: teams) 
    end

  end

end

然后,您可以执行以下操作:

代码语言:javascript
复制
Invitation.for_teams(player.teams)

并返回任何球队收到的所有邀请,其中该球队的成员是该球员。

顺便说一句,我认为你的invites联想是错误的。我认为它们应该是:

代码语言:javascript
复制
class Team
  has_many :team_members
  has_many :players, through: :team_members, dependent: :destroy
  has_many :invites, class_name: 'Invitation', as: :invitee
  has_many :invitations, as: :inviter
end

class Player
  has_many :team_members
  has_many :teams, through: :team_members, dependent: :destroy
  has_many :invites, class_name: 'Invitation', as: :invitee
end

现在,您可能会得到不正确的结果,因为在has_many调用中忽略了invitee_type

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57503199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档