使用连接模型轨道的has_many属性:通过
-
18-09-2019 - |
题
作为一个例子,我有一个模型组和模型用户
它们与连接:的has_many,:通过=> groups_users
groups_users表具有一个属性,称为慢化剂,指定用户是否是该组的慢化剂
的问题:如何访问一个给定组的所有调节剂
阅读后:with_scope,想到什么是
def find_moderators
Group.with_scope(:find=>{:conditions => "moderator=1"})
@moderators=@group.users
end
end
然而,轨道2后,with_scope变得保护,并且不会在控制器允许给定的代码,所以什么是很好的替代吗?
解决方案
与解决
class Group
has_many :groups_users
has_many :moderatorships, :class_name => "GroupsUser",:conditions => {:moderator => true}
has_many :moderators, :through => :moderatorships, :class_name => "User", :source => :user
end
首选马特·范霍恩的答案,因为当我们选择具有@ group.moderators用户信息,而他的解决方案提供了单独的查询每个主持人这一个只产生一个查询
编辑:更新回答Sizzlepants'的问题。与此代码创建应该有主持人主持人属性中加入模型设置为true(Rails使用:条件,同时建立连接模型),另外,如果我不得不现在它的代码,我会为命名可读性groups_users成员
其他提示
class User
has_many :group_users
has_many :groups, :through => :groups_users
end
class GroupUser
belongs_to :user
belongs_to :group
named_scope :as_moderator, :conditions => "moderator=1"
end
class Group
has_many :group_users
has_many :groups, :through => :groups_users
def moderators
group_users.as_moderator.map{|gu|gu.user}
end
end
# use it:
@moderators = @group.moderators
or
@all_mods = Group.all.map{|g|g.moderators}.flatten
猴补丁!
class Group < ActiveRecord::Base
public :with_scope
end
不隶属于 StackOverflow