Как я могу оптимизировать эту ситуацию с ActiveRecord (Rails 3) - PullRequest
1 голос
/ 12 октября 2010

Допустим, у меня есть следующая ассоциация:

Club has_many users
User has_many guns
Gun has_many bullets

Club: Moe, Larry, Curly

Moe: 2 guns
gun 1 has 100 bullets
gun 2 has 20 bullets

Larry: 1 gun
gun 1 has 40 bullets

Curly: 2 guns
gun 1 has 20 bullets
gun 2 has 10 bullets

Теперь я хочу узнать, сколько пуль в КЛУБЕ.

Это просто в использовании: Moe.bullets.sum(: количество) = 120 пуль.

Но как я могу получить все пули без перебора каждого пользователя?

Надеюсь, это имеет смысл.

Кстати, яиспользование ActiveRecord и Rails 3.

Спасибо!

1 Ответ

2 голосов
/ 12 октября 2010

Я предполагаю, что пистолет 1 и пистолет 2 - это имена, а не уникальный идентификатор.В этом случае

Клуб has_many пользователей Пользователь has_many guns Gun has_many bullets

Клуб: Мо, Ларри, Кудрявый

Пушка: 1 (Мо), 2 (Мо),3 (Ларри), 4 (Кудрявый), 5 (Кудрявый)

Мое: 2 пушки (пистолет) 1 имеет 100 пуль (пистолет) 2 имеет 20 пуль

Ларри: 1 пистолет (пистолет) 3 имеет 40 пуль

Кудрявый: 2 пистолета (пистолет) 4 имеет 20 пуль (пистолет) 5 имеет 10 пуль

В этом случае я бы добавил идентификатор клуба также на стол оружия,с помощью которого мы можем напрямую получить количество пуль в клубе ...

Или альтернативное решение - использовать counter_cache ...

Надеюсь, это поможет

rgds,

Каннан Р

...