0

我有一个模型,我正在使用awesome_nested_set插件在分层组织中跟踪权限。我遇到了一个问题,其中两个named_scope链接在一起时正在创建一个复制INNER JOIN这些named_scopes为什么会导致重复的INNER JOIN?

class Group < ActiveRecord::Base 
    acts_as_nested_set 
    has_many :memberships 
    has_many :accounts, :through => :memberships 
    has_many :authorizations 
    has_many :users, :through => :authorizations 
end 

两个named_scope s的位于所述Account模型,和用于过滤由一个用户帐户和由一组:

named_scope :in_group, lambda { |id| 
    group_ids = Group.find(id).self_and_descendants.collect(&:id) 
    { :joins => :memberships, :conditions => ["memberships.group_id in (?)", group_ids] } 
} 

named_scope :for, lambda { |user| 
    groups = user.authorizations.groups.collect(&:id) unless user.admin? 
    user.admin ? {} : { :joins => :groups, :conditions => ["groups.id IN (?)", groups] } 
} 

这两种named_scope的需要加入memberships,但他们不应该能够做到这一点没有重复?当它们链接在一起,MySQL的吹了以下错误:

Mysql::Error: Not unique table/alias: 'memberships': SELECT `accounts`.* FROM `accounts` INNER JOIN `memberships` ON accounts.id = memberships.account_id INNER JOIN `memberships` ON `accounts`.`id` = `memberships`.`account_id` INNER JOIN `groups` ON `groups`.`id` = `memberships`.`group_id` WHERE ((memberships.group_id in (54,94)) AND (groups.id IN (54,94))) ORDER BY business_name, location_name LIMIT 0, 75 
+1

您是否尝试将'for'命名范围中的连接语句更改为':joins => {:memberships =>:groups}?我怀疑has_many通过关系可能会导致它。 – 2010-07-09 19:03:44

+0

DUH! ''我应该看到那个。谢谢!你应该添加一个答案,以便我可以标记它。 – 2010-07-09 19:26:11

+0

很高兴为你效劳 – 2010-07-09 19:29:50

回答

1

试一试更改名为范围的连接语句:joins => {:memberships => :groups}。我怀疑has_many通过关系可能会导致它。