鉴于我有这样的模型:
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
如何访问members
group
?我总是做@group.members
或类似的事情,给我一个错误,说明在模型中找不到这种关系。
提前致谢。
## EDIT ##
我得到的错误是:Could not find the association "group_memberships" in model Group
答案 0 :(得分:0)
我在一个我正在研究的网站上做了类似的事情,但这些关联与你的工作方式有点不同,但也许它会有所帮助。我认为你需要使用has_and_belongs_to_many关联来加入你的多对多关系。
在我的数据库中,我有Users,Members和UsersMembers
您不需要创建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
答案 1 :(得分:0)
您可能需要指定:class_name =&gt;你的has_many:成员声明中的'人'。