访问has_many中的值:通过连接表

时间:2010-02-16 00:16:02

标签: ruby-on-rails ruby has-many-through

我通过成员资格连接表获得了组成员的用户,并且该连接表的一个属性是“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

2 个答案:

答案 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