2015-02-03 6 views
0

У меня есть 4 класса: , Platform и Listing и Item.рельсы запрос has_many через отношения

Пользователь имеет множество платформ.

У платформы есть много предметов по спискам.

Листинг относится к товару и относится к платформе.

Товар имеет много объявлений.

Как я могу получить все пользователи?

Мое существующее решение (которое включает в себя решение в эффективном в памяти) заключается в следующем:

user.platforms.includes(:items).inject([]) { |result, x| result + x.items } 

ответ

1

Вы можете добавить отношение в вашей User модели. ActiveRecord позаботится о вашем запросе.

class User < ActiveRecord::Base 
    has_many :platforms 
    has_many :items, through: :platforms 
end 
+0

Я хочу оставить пользователя отдельно от платформ. Любые решения без добавления пользователя has_many? –

+0

Вы уже подключили пользователя к платформе. – Nemrod

0

Вы можете использовать запрос начинается с Item и использовать user.id в качестве параметра.

Item.joins(:platforms).where("platform.user_id = ?", user.id) 
+0

Элемент не относится к платформе ... Взаимоотношения таковы: платформа имеет много элементов через списки. Листинг относится к элементу и относится к платформе. Пункт имеет много списков. –

+0

Так почему бы вам не добавить это отношение? – Nemrod

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