0

鉴于我有这样的模型:

class Person
  has_many :owned_groups, :class_name => "Group", :foreign_key => :owner_id
  has_many :owned_group_memberships, :through => :owned_groups, 
              :source => :group_memberships 

  has_many :group_memberships, :foreign_key => "member_id"
  has_many :groups, :through => :group_memberships

end

class GroupMembership
  belongs_to :member, :class_name => 'Person'
  belongs_to :group
end

class Group
  belongs_to :owner, :class_name => "Person"
  has_many :group_memberships
  has_many :members, :through => :group_memberships
end

如何访问membersa grouphas?我总是这样做@group.members或类似的事情,给我一个错误,说在模型中找不到关系。

提前致谢。

##编辑##

我得到的错误是:Could not find the association "group_memberships" in model Group

4

2 回答 2

0

您可能需要在 has_many :members 语句中指定 :class_name => 'Person' 。

于 2011-05-23T02:15:39.153 回答
0

我在我正在开发的网站上做了类似的事情,但是关联与您的操作方式略有不同,但也许会有所帮助。我认为您需要使用 has_and_belongs_to_many 关联来加入您的多对多。

在我的数据库中,我有用户、成员和用户成员

您不需要创建 UsersMembers 模型(在您的情况下为 GroupMembership),但您确实需要一个数据库表来链接两者。

#Migration
    create_table :bands_users, :id => false, :force => true do |t|
      t.integer :band_id,       :null => false
      t.integer :user_id,       :null => false
    end

#Models
  class Band < ActiveRecord::Base
    has_and_belongs_to_many :members, :class_name => 'User'
  end

  class User < ActiveRecord::Base
    has_and_belongs_to_many :bands
  end

从这里我现在可以调用@band.members 或@user.bands

于 2011-05-22T23:06:08.830 回答