Has_many通过与布尔属性的关联

时间:2014-07-31 17:36:11

标签: ruby-on-rails

我有三个型号。 OrganizerOrganizationConnection

# Schema Information
#
# Table name: connections
#
# organizer_id       :integer
# organization_id    :integer
# admin              :boolean      default(false)

class Connection < ActiveRecord::Base
  belongs_to :organizer
  belongs_to :organization
end

-----------

# Schema Information
#
# Table name: organizations
#
# name               :string

class Organization < ActiveRecord::Base

  has_many :connections
  has_many :organizers, through: :connections
end

-----------

# Schema Information
#
# Table name: organizers
#
# name               :string
# ...

class Organizer < ActiveRecord::Base

  has_many :connections
  has_many :organizations, through: :connections
end

通过这种关联,我可以很容易地找到组织者所拥有的组织,反之亦然。我过于复杂的部分是如何告诉组织者 admin 到哪个组织。我将此基于admin表格上的Connection布尔值。

到目前为止,我能够找到具有此查询的组织的管理员

Organization.find(...).connections.where(admin: true)

从那里开始,我想我会检查这个关联includes?是否是一个特定的组织者,但是当它应该是真的时它会给我错误。

Organization.find(...).connections.where(admin: true).include?(Organizer.find(...))

但我正在寻找一种方法来检查特定organizer是否为特定organization管理员。也许我设置关联的方式不正确。今天让我感到困惑。对此有任何建议真的很感激。

声明: 每个组织可以有多个管理员

1 个答案:

答案 0 :(得分:1)

现在,您在一系列连接中搜索组织者,导致该语句返回false。您需要首先将连接映射到它们所属的组织器,如下所示:

Organization.find(...).connections.where(admin: true).map(&:organizer).include?(Organizer.find(...))