我通过成员资格连接表获得了组成员的用户,并且该连接表的一个属性是“administrator”。我正在尝试在组的成员视图中进行检查,循环遍历每个成员以查看他们是否是管理员。
在视图中我尝试了以下内容:
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
答案 0 :(得分: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
答案 1 :(得分:1)
虽然我认为您可以设置关联来完成此操作,但我认为最简单的方法是在您的用户模型中添加一个方法,允许您检查每个用户(这样它就适合您拥有的循环)提供)。我不知道它是否会降低它,可能需要一些快速更改,但你可以从以下内容开始:
用户模型
def is_administrator_of(group_id)
Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end