class Organization < ActiveRecord::Base
has_many :admins
has_many :users, :through => :admins
class User < ActiveRecord::Base
has_many :admins
has_many :organizations, :through => :admins
無汗。 @org.users
返回管理員用戶列表。
現在我需要添加另一個角色:版主。我不能在中間添加另一個表(因爲一個關聯只能有一個目標)。
一位朋友建議我讓版主多態。我在Rails指南中讀到了這一點,但不知道如何在這裏實現它。
我試過這個:
class Moderator < ActiveRecord::Base
belongs_to :modable, :polymorphic => true
end
...然後將其添加到我的用戶和組織模型:
has_many :moderators, :as => :modable
從技術上講這可行,但是,我無法讓我的用戶這個的。我試圖在主持人表中添加一個user_id
列,但沒有關聯,Rails不想抓住它:
> @org.moderators.joins(:users)
ActiveRecord::ConfigurationError: Association named 'users' was not found; perhaps you misspelled it?
任何幫助都非常感謝。謝謝!
UPDATE:
結束於此(注意:主持人被稱爲「網絡用戶」):
class Organization < ActiveRecord::Base
has_many :roles
has_many :users, :through => :roles
has_many :admin_roles, :conditions => {:role_type => "AdminRole"}
has_many :admins, :through => :admin_roles, :source => "user", :class_name => 'User'
has_many :network_user_roles, :conditions => {:role_type => "NetworkUserRole"}
has_many :network_users, :through => :network_user_roles, :source => "user", :class_name => 'User'
# This all lives in one table; it has a organization_id, user_id, and special_role_type columns
class Role
belongs_to :organization
belongs_to :user
end
class AdminRole < Role
end
class NetworkUserRole < Role
end
class UserRole < Role
end
你原來的關聯對我來說似乎沒有多大意義。 @ org.users如何產生管理員用戶(除非你的所有用戶都是不太可能的管理員)?管理員似乎是組織和用戶模型之間似乎是多對多的聯合模型。 – Shreyas 2011-03-08 19:34:10
爲什麼不把用戶的角色存儲在一個字段中?有一個傳統的管理類嗎? – justinxreese 2011-03-08 20:11:39
工作正常(或者我認爲?),因爲:has_many:users,:through =>:admins - 當我打電話給用戶時,它會加入管理員,然後加入用戶。 – jmccartie 2011-03-08 20:26:38