2017-02-18 6 views
1

У меня есть следующая настройка в моей базе данных. У нас есть пользователи. У каждого пользователя много записей. Пользователи также принадлежат к организациям через таблицу, называемую организацией_узлы.Ruby on Rails 4 - Как получить ассоциацию has_many для группы пользователей?

class User < ActiveRecord::Base 
    has_many :entries 
    has_many :organization_users 
    has_many :organizations, :through => :organization_users 
end 

class Entry < ActiveRecord::Base 
    belongs_to :user 
end 

class Organization < ActiveRecord::Base 
    has_many :organization_users 
    has_many :users, :through => :organization_users 
end 

class OrganizationUser < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :organization 
end 

Вот мой вопрос: для данной организации, я хочу, чтобы получить список всех записей для пользователей в этой организации. Есть ли хороший компактный способ сделать это? Я знаю, что могу перебирать всех пользователей в организации и получать записи, но я не уверен, есть ли хороший способ rails-y для этого.

ответ

0

Вы можете сделать следующее если у вас есть внешний ключ, называемый organization_id в organization_users таблицы в соответствии с вашей моделью

Entry.joins(:user => :organization_users).where("organization_users.organization_id = ?", org_id) 

org_id Где это id данной организации. Это даст вам все записи всех пользователей в организации

+0

эй спасибо, но этот запрос не предоставляет список записей для всех пользователей в организации – user402516

+0

@ user402516 обновил ответ со списком записей для всех пользователей в организации. – Gowtham

0

попробовать что-то вроде этого:

my_org = Organization.find(id) 
my_org.users.eager_load(:entries) 

Сначала вы получаете организации, которую вы хотите запросить. Затем через: через ассоциацию вы можете напрямую получить всех пользователей для этой организации. И последний, используя eager_load, в одном запросе вы получаете все записи. Результатом будет ActiveRecord :: Relation.

+0

Это не сработает, так как после извлечения всех пользователей с помощью 'my_org.users', rails возвращает объект ActiveRecord :: Associations :: CollectionProxy', а не экземпляр «ActiveRecord». Поэтому вы не можете вызывать 'entries' в' CollectionProxy'. Ваш метод может работать только в том случае, если вы извлекаете одного пользователя, например: 'my_org.users.first.entries' – Mark

+0

True. Одну секунду. Я исправляю свой ответ. – devoh

+0

это выглядит многообещающим, но когда я запускаю ваши заявления выше, я возвращаю ActiveRecord :: AssociationRelation, который принадлежит пользователям, а не их записи. Есть предположения? – user402516