2017-02-16 1 views
0

Если у меня есть эти отношения твердаРельсы - Получение коллекция 2 уровня-Relation уникальных элементов

class article 
    has_many :products 
end 

class product 
    has_one :item 
end 

Учитывая определенный экземпляр статьи, как я могу получить коллекцию (я не возражаю, если это Массив или ActiveRecord_AssociationRelation) всех Элементы, содержащиеся в нем, без каких-либо повторений? То есть каждый Элемент уникальной коллекции.

ответ

0

Лучший способ получить ответ - перевернуть вопрос. Вместо того, чтобы начинать из статьи и найти все товары, которые он содержит, вы можете начать с предметов и выбрать только те, которые содержатся в правой статье:

my_article = Article.find(...) 
items = Item.joins(:product).where(product: { article: my_article }) 

Это поможет вам только те элементы, которые принадлежат к продукту, который принадлежит к статья в вопросе.

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

Edit: это предполагает, что пункт имеет belongs_to :product о продукте и имеет belongs_to :article.

+0

Конечно, это было бы проще ... проблема в том, что я не знаю заранее, какие элементы содержатся в статье :) Это всегда очень легко решить проблему, когда вы начинаете с решения: D –

+0

Извините , не уверен, что понимаю! Все, что вам нужно знать, это статья ('my_article' в коде выше). После запуска этого кода элементы будут заполнены результатами, которые вы ищете: все элементы, содержащиеся в этой статье. – gmcnaughton

+1

Это я не понял вашего ответа. Это действительно работает, хотя я не уверен, что он наиболее эффективен. Я отдам его. Благодаря! –

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