2017-05-11 6 views
0

Ich habe zwei Tabellen Promo und ImageRails erhalten zweite Satztabelle verbindet

Promo hat id und name

Image hat Namen und img_url promo_id

assosiations => Promo has_many Bilder

und Ich möchte zweiten Datensatz von image Tabelle wo promo_id 1,

holen i

for_example wenn Promo.first.images.second tut, es ist schlecht für perfomace , wenn mein Bild Tabelle eine Menge Aufzeichnungen

hat also denke ich, ich brauche so etwas wie Promo.joins(:images).where('????')

Antwort

0

ich will zweiten Datensatz aus Bildtabelle holen, wo promo_id 1

Da Sie promo_id in images Tisch haben, ist keine join benötigt:

Image.where(promo_id: 1).second 
#=> SELECT "images".* FROM "images" WHERE "images"."promo_id" = $1 ORDER BY "images"."id" ASC LIMIT $2 OFFSET $3 [["promo_id", 2], ["LIMIT", 1], ["OFFSET", 1]] 

Wenn Sie das Bild auch id angeben möchten, fügen Sie einfach es zu where:

Image.where(promo_id: 1, id: 2) 
#=> SELECT "images".* FROM "images" WHERE "images"."promo_id" = $1 AND "images"."id" = $2 LIMIT $3 [["promo_id", 1], ["id", 2], ["LIMIT", 11]] 

Dies setzt voraus, dass das zweite Bild id2 ist.

Beide Optionen generieren eine einfache Abfrage für Ihre Datenbank, daher sollten Sie keine Leistungsprobleme haben (ich nehme auch an, dass Sie Indizes in Ihrer images Tabelle festgelegt haben).

Verwandte Themen