1

我通过成员资格联接表获得了属于组成员的用户,并且该联接表的属性之一是“管理员”。我正在尝试在组的成员视图中进行检查,遍历每个成员以查看他们是否是管理员。

在视图中,我尝试了以下操作:

for user in @group.users
  if user.administrator?
    ...DO STUFF
  end
end

我也在控制器中试过这个:

@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])

但没有运气。有什么想法吗?

更新 - 如下所示,将一个方法放入用户模型中:

def is_administrator_of(group_id)
        Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
4

2 回答 2

2

我认为这将是一种更清洁的方法

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :admins, :through => :memberships, :source => :user,
           :conditions => ['memberships.administrator = ?', true] 
end

您现在有一个 group.admins 列表

for user in @group.admins
    ...DO STUFF
end
于 2010-02-16T00:40:08.230 回答
1

尽管我认为您可以设置关联来完成此操作,但我认为最简单的方法是向您的 User 模型添加一个方法,该方法允许您检查每个用户(这样它就适合您提供的循环)。我不知道它是否会正确,可能需要一些快速更改,但您可以从以下内容开始:

用户模型

def is_administrator_of(group_id)
    Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end
于 2010-02-16T00:21:03.933 回答