1

Rails で has many_through 関係を作成する必要があります。返されるレコードは、結合テーブルが別のテーブルの特定のレコードに関連付けられているレコードのみです。

SQL で試しましたが、うまくいきません。以下の SQL リレーションをアクティブ レコード スタイルで表現するにはどうすればよいですか?

モデルは次のとおりです。

class User
  has_many :organisation_roles
  has_many :organisations,
           through: :organisation_roles
end 

class OrganisationRole
  belongs_to :user
  belongs_to :organisation
  belongs_to :role
end

class Role
  has_many :organisation_roles
end

class Organisation

  has_many :organisation_roles
  has_many :roles, through: :organisation_roles
  has_many :users, through: :organisation_roles

  # This doesn't work
  has_many :members, 
           class_name: 'User', 
           through: :organisation_roles,
           finder_sql: Proc.new {
             %Q{
               SELECT u.*
                 FROM users u, organisation_roles ors, roles r
                WHERE ors.organisation_id = #{id} AND r.name = 'member'
       }
  }

  # This doesn't either
  has_many :managers, 
           through: :organisation_roles, 
           source: :user, 
           conditions: { organisation_roles: { role: { name: 'manager' }}}

end
4

1 に答える 1

0

has_many ではなく、インスタンス メソッドを使用していますが、解決策が見つかりました。

class Organisation
  # other stuff

  def members
    users.joins(:roles).where("roles.name = 'member'")
  end
end

class User
  # other stuff

  has_many :roles,
           through: :organisation_roles
end
于 2013-02-21T21:09:30.850 に答える