2011-04-01 15 views
0

私はいくつかのアカウントとユーザを持っています。複雑なhas_many関係とRails

私は、ユーザーが管理者、編集者、または任意の(そして多くの)アカウントにできる必要があります。現時点で

は、私はこれを持っている:

has_many :memberships, :dependent => :destroy 
    has_many :administrators, :through => :memberships, :source => :user, :conditions => {'memberships.is_admin' => true} 
    has_many :editors, :through => :memberships, :source => :user, :conditions => {'memberships.is_editor' => true} 
account.rb

user.rb

has_many :memberships 
    has_many :accounts, :through => :memberships 
    has_many :editor_accounts, :through => :memberships, :source => :account, :conditions => {'memberships.is_editor' => true} 
    has_many :administrator_accounts, :through => :memberships, :source => :account, :conditions => {'memberships.is_admin' => true} 

は基本的に、私はacheiveしようとしていることの素敵な簡単な方法であります素敵なシンプルな方法でこれをモデリングしています。

@account.administrators << current_user 
current_user.adminstrator_accounts = [..] 

など

+0

':条件=> 'memberships.is_admin' => true'を=> 'に変換する:条件=> [ '?memberships.is_admin ='、真]' – fl00r

答えて

1

あなたがこれを行うことができるはずですが、それは自動的に干渉するあなたが使用した表記法であるかもしれない:たとえば、次のようこれは本当に有用であろう行うことができること範囲アプリケーション:

has_many :memberships, 
    :dependent => :destroy 
has_many :administrators, 
    :through => :memberships, 
    :source => :user, 
    :conditions => { :is_admin => true } 

条件キーは、条件キーが関連付けの列名と一致する場合にのみ適用する必要があります。 usersテーブルにis_adminカラムがない限り、これは問題ありません。

メモとして、このような何かのための複数のブール値フラグを持つことは厄介かもしれません。管理者と編集者が可能ですか?あなたは、単純な役割列を持つ方が良いし、そのを使用することができます:

has_many :administrators, 
    :through => :memberships, 
    :source => :user, 
    :conditions => { :role => 'admin' } 

多目的列は、多くの場合、インデックス化の観点から、単一目的の列の多くよりも優れています。これらの各列のインデックスを作成する必要があります。多くの場合、いくつかのキーに対して行う必要があります。これは急いで乱雑になることがあります。

+0

が少ない決してそれを使用することは悪い考えではありません条件内の列名 – fl00r

関連する問題