2017-02-16 2 views
0

Wenn ich diese Beziehungen habenRails - Erste Sammlung von 2-Level-Beziehung Unikaten

stablished
class article 
    has_many :products 
end 

class product 
    has_one :item 
end 

Bei einem bestimmten Artikel Beispiel, wie ich eine Sammlung bekommen konnte (ich nichts dagegen, wenn es sich um eine ist Array oder ein ActiveRecord_AssociationRelation) aller Items darin enthaltenen, ohne sich zu wiederholen? Das ist jeder Artikel der Sammlung ist einzigartig.

Antwort

0

Der beste Weg, um die Antwort zu erhalten, ist durch Umdrehen der Frage. Anstatt von Artikeln beginnen und alle Gegenstände zu finden, es enthält, können Sie von Artikeln starten und wählen Sie nur diejenigen, die in dem richtigen Artikel enthielten:

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

Dies werden Sie nur Einzelteile erhalten, die zu einem Produkt gehört, die zu der gehört Artikel in Frage.

Die Liste wird eindeutig sein, weil Sie mit allen Elementen beginnen und dann die Liste mit where eingrenzen.

Edit: dies setzt voraus, dass Artikel hat eine belongs_to :product Aussage und Produkt hat belongs_to :article.

+0

Natürlich wäre das einfacher ... das Problem ist, dass ich nicht im Voraus wissen kann, welche Artikel in dem Artikel enthalten sind :) Es ist immer sehr einfach, ein Problem zu lösen, wenn Sie mit der Lösung beginnen: D –

+0

Entschuldigung , Nicht sicher ob ich verstehe! Alles, was Sie wissen müssen, ist der Artikel ('my_article' im obigen Code). Nachdem Sie diesen Code ausgeführt haben, wird 'items' mit den Ergebnissen gefüllt, die Sie suchen: Alle in diesem Artikel enthaltenen Items. – gmcnaughton

+1

Ich war es, der deine Antwort nicht verstanden hat. Es funktioniert tatsächlich, obwohl ich nicht sicher bin, dass es am effizientesten ist. Ich werde es versuchen. Vielen Dank! –

Verwandte Themen