2011-05-22 81 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:成員發言。