我有一些帐户和用户,目前已脱节。
我需要用户能够成为管理员,编辑或任何(和许多)帐户。
目前,我有这个:
account.rb
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}
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}
基本上,我想要实现的是一种简单的建模方法,它以一种简单的方式工作。例如,能够执行以下操作非常有用:
@account.administrators << current_user
current_user.adminstrator_accounts = [..]
等
答案 0 :(得分: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' }
从索引角度来看,多用途列通常比多个单用途列更好。您必须为这些is_admin
类型的列中的每一个编制索引,并且通常需要为多个键执行此操作。这可能会很匆忙。