2016-08-11 4 views
0

Ich habe ein Event Modell, das user_id darin hat. Ich möchte alle Objekte dieses Modells mit der angegebenen user_id auswählen, jedoch keine spezifischen Ereignisse. So kann ich es tun mit einer Abfrage wie folgt aus:Gibt es eine Möglichkeit, wo und wo zu kombinieren, nicht in einer Bedingung in Rails?

Event.where(user_id: user.id).where.not(id: id) 

Aber kann ich diese 2 where Funktionen miteinander zu kombinieren?

Ich weiß, dass, wenn ich finden müssen, beispielsweise Veranstaltungen mit Angabe id s und user_id s, ich es auf diese Weise tun:

Event.where(user_id: user_id).where(id: id) 

und ich kann es anstelle der Verwendung eines where Anruf kompakt zwei:

Event.where(user_id: user_id, id: id) 

aber kann ich das gleiche tun, wenn ich where und where.not verwenden?

Antwort

2

können Sie schreiben, wie pro unten hinzufügen, wo und wo.nicht:

Event.where(
    "user_id = ? AND id != ?", 
    user.id, 
    id 
) 

so, wenn user_id = 1 und id = 2 als dies Datensätze zurück mit User_id 1 und ohne id 2 :)

0

dies versuchen, können Sie zwei Bereiche erstellen und ruft dann in der Kette

scope :with_user, ->(user) {user_id: user.id} 

scope :excluded_event, ->(event_ids) { where.not(id: event_ids) } 

Event.with_user(user).excluded_event(event_ids) 
0

Sie

sammeln können
Event.where(user_id: 1) + Event.where.not(id: 2) 

oder verweigern, einen Parameter

Event.where(user_id: 1).where.not(id: 2) 
Verwandte Themen