2017-07-17 4 views
0

I ManytoMany Assoziationsaufbau zwischen Modell User und Tag haben, nehme an, wenn ichRails - Filtern Sie die Ergebnisse, wenn sie die Vereinigung entsprechen

users = User.all 

Dies tun gibt mir alle Benutzer, ich diese Datensätze filtern wollen, wenn sie sind in ManyToMany Verbindung mit sagen tag_id55

Für ein einzelnes Objekt lässt ich weiß, dass ich users.first.tags.exists?(55) tun können, und das wird true oder false bot geben, wie führe ich dies auf eine users, die 100 von Rekord enthält? Meine Fragen sind

  1. Ist die Verwendung von Schleife der einzige Weg, um dies zu erreichen?
  2. Wie in Datensätze aus users zu entfernen, wo die Beziehung nicht existiert?
  3. Ich habe Hunderte von Datensätzen in users, also muss ich dies auf eine Weise tun, es wirkt sich nicht auf die Leistung.

Ich werde wirklich jede Rückmeldung zu diesem zu schätzen wissen.

Antwort

1

können Sie das Tag-ID 55 von Benutzer Zugriff auf diese Weise

@user = User.joins(:tags).where("tags.id = ?" ,55) 

ODER

@user = User.includes(:tags).where(tags: {id: 55}) 

Sie auch für mehrere IDs von Tag auf diese Weise

tags_id = [55,56,57,58,59] 
@user = User.joins(:tags).where("tags.id IN = (?)" ,tags_id) 

filtern Mit dieser Abfrage können Sie herausfinden, ob Zuordnungen vorhanden sind oder nicht

User.includes(:tags).where(:tags => { :id => nil }). 

Es gibt alle Benutzer, die keine Tags haben.

+0

Könnten Sie bitte erklären, was hier vor sich geht? – Saadia

+0

So wird es 2 Tabellen Benutzer und Tag beitreten. Es ist Standard-Abfrage von Schienen. Es wird für eine bessere Leistung verwendet. Es wird alle Datensätze in einer Abfrage abrufen. – Vishal

+0

@Saadia Sie können diese Antwort akzeptieren, wenn es für Sie hilfreich ist – Vishal

Verwandte Themen