0

У меня есть модель, которую я использую для отслеживания разрешений в иерархической организации с использованием плагина awesome_nested_set. Я сталкиваюсь с проблемой, когда два named_scope s, когда они связаны друг с другом, создают дублирование 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 могут вызвать это. –

+0

DUH! '' Я должен был это видеть. Благодаря! Вы должны добавить ответ, чтобы я мог его пометить. –

+0

Рад, что это сработало для вас –

ответ

1

Попробуйте изменить заявление вступить в для имени сферы в :joins => {:memberships => :groups}. Я подозреваю, что отношения has_many могут вызвать это.