我有谁是组成员通过会员加入桌旁站用户,以及连接表的属性之一是“管理员”。我试图做一个检查组的成员观点的内部,通过每个成员循环,看看他们是管理员。

在视图我试过如下:

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

我也试过这在控制器:

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

但没有运气。任何想法?

<强> UPDATE - 每下面,把一个方法到用户模型:

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

解决方案

虽然我认为你可以设置关联来实现这一点,我认为这样做将是一个方法添加到您的用户模式,让您检查每个用户(这样它会适合你有循环的最简单方法提供)。我不知道这是否会降权的话,可能需要几个简单的变化,但你可能喜欢的东西开始:

  

用户模型

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

其他提示

我认为这是做这一个更清洁的方式。

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top