2016-07-13 13 views
0

Ich habe zwei Modelle: Region und Item mit einer Verbindung has_many_through.Aktiver Datensatz verknüpfte Objekte in der Liste der Objekte

kann ich schreiben, wie erwartet:

Region.find(4).items 

Was ich versuche ist

Region.where(:id => [4,5,6]).items 

Dies führt zu

undefined method `items' 

Gibt es eine einfache Art und Weise zu erreichen, zu tun Dies ? Anders als durch die Regionen zu schlendern und die Ergebnisse zu kombinieren?

+0

es ist der gleiche Fall von dieser [Frage] (http://stackoverflow.com/questions/38337940/how-to-iterate-through-a-relation-in-a-single-line-in-rails-4/38337983 # 38337983) – lusketeer

+0

versuchen Item.joins (: region) .where ("region.id IN?", [4,5,6]) – power

+0

Dies hat den Trick, dank der Macht. (gerade hinzugefügt() um die?) –

Antwort

0

Als Leistung vorgeschlagen, ist es das, was ich brauchte:

Item.joins(:regions).where("regions.id IN (?)", [4,5,6]) 

Ich fügte hinzu, die() um die? damit es tatsächlich funktioniert.

1

können Sie versuchen, diese Abfrage

Region.where(id: 2..5).includes(:hosts) 

Diese geben eine Beziehung Active. Jedes Regionsobjekt wird die zugeordneten Hosts geladen haben.

0

Versuchen Sie, diese

result = Region.where(:id => [4,5,6]).map(&:items) 

Wenn Sie dann rufen flatten Methode auf Ergebnis einzelnen Array wollen.