在访问的has_many值:通过连接表
-
20-09-2019 - |
题
我有谁是组成员通过会员加入桌旁站用户,以及连接表的属性之一是“管理员”。我试图做一个检查组的成员观点的内部,通过每个成员循环,看看他们是管理员。
在视图我试过如下:
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
不隶属于 StackOverflow