2013-12-10 5 views
1

У меня есть следующие ассоциации:Выбор has_many с has_many

class User 
    has_many :orders 
    has_many :events 
end 

class Event 
    belongs_to :user 
    has_many :orders 
end 

class Order 
    belongs_to :event 
end 

Моя проблема заключается в том, что при выполнении User.last.events.orders я ничего не получаю, в то время как User.last.events.last.orders в результате с (последний - это то, что я выбрал для его проверки)

В чем проблема?

Имейте в виду, что пользователь имеет порядок, но пользователи, у которых есть событие, могут иметь заказы от других пользователей ...

вот что я пытаюсь получить здесь.

Спасибо!

+2

'user.events.flat_map (&: orders) .uniq' получит все заказы, связанные с этим пользователем (' array.flat_map (&: orders) 'вызывает метод' orders' для каждого элемента 'array') - это может быть медленным для выполнения этой команды, в зависимости от количества отсчетов и количества заказов. – MrYoshiji

ответ

1

User.last.events является коллекция событий, так что не должно быть никаких orders метод и User.last-events.orders должен генерировать no method error.

Я заметил также, что вы не имели belongs_to :user декларацию о вашем Order, даже если у вас есть has_many :orders на User.

2

User.first.events дает множество событий, связанных с указанной записью пользователя (в данном случае, во-первых, в вашем случае последнего)

Итак, когда вы звоните User.first.events.orders вы, вероятно, получите ошибку 'noMethod заказов.

И User.first.events.last.order предоставит вам заказы, связанные с последним событием первого пользователя.

Если вы хотите получать заказы от событий, которые не для этого пользователя, вам придется иметь более сложный запрос.

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