2016-09-01 5 views
0

У меня есть Клиент, который отправляется в магазин, у которого есть менеджер. Как клиент, так и менеджер из модели Люди, только разные роли.Оптимизация длинной цепи ассоциаций

Каков наилучший способ получить Менеджер от Клиента?

Сейчас у меня есть это решение, которое очень медленно:

shop_manager = customer.shop.people.select{|p| p.has_role?(:manager)}.first 

person.rb:

belongs_to :shop 

shop.rb:

has_many :people 

Роли назначается с использованием rolify жемчужина.

+1

показать нам ассоциацию для 'person',' shop', также как хранение 'roles' – lusketeer

+0

Пожалуйста, смотрите обновленный вопрос – Zelenka

ответ

3

Нравится?

shop_manager = customer.shop.people.with_role(:manger).first 
+0

Да, спасибо. Любые другие возможности заставить его работать быстрее? – Zelenka

+0

Я не уверен, как метод 'with_role' работает в фоновом режиме, но это включено в документацию, я полагаю, он должен быть эффективным? do 'customer.shop.people.with_role (: manger) .to_sql' в вашей консоли rails и опубликуйте результат здесь, и я посмотрю на сторону sql – lusketeer

+0

Теперь все в порядке, спасибо – Zelenka

Смежные вопросы