2011-05-22 142 views
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 

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

在此先感谢。

## EDIT ##

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

+0

你有没有试过@ group.people? – DGM 2011-05-22 20:39:14

+0

说的方法是undefined – Zeroz 2011-05-22 20:57:13

+0

请告诉我们你得到的错误。 – 2011-05-22 23:29:21

回答

0

我做类似的事情在我工作的一个网站,但该协会是如何一点点不同你正在做,但也许会有所帮助。我认为你需要使用has_and_belongs_to_many关联来加入你的多对多关系。

在我的数据库我有你并不需要创建一个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

+0

感谢您的回答!问题是我在Group_Membership中拥有属性,并且我的所有项目都已经在使用此结构。所以像这样的变化是不可能的= / – Zeroz 2011-05-22 23:13:13

0

您可能需要指定:CLASS_NAME => '人' 在你的has_many:成员发言。