ActiveRecord wo Feld =? Array möglicher Werte


Antworten:


157

Von hier aus scheint es mit einer SQL- inAnweisung zu geschehen :

Model.where('id IN (?)', [array of values])

Oder einfacher, wie kdeisz betonte (Verwenden von Arel zum Erstellen der SQL-Abfrage):

Model.where(id: [array of values])

6
Dies kann vereinfacht werdenModel.where(id: [array of values])
kddeisz

Model.where ("id in (?)", [1..8]) scheint für mich nicht zu funktionieren. irgendwelche Ideen?
BKSpurgeon

Sie brauchen die eckigen Klammern nicht, 1..8ist bereits Array-ähnlich.
Will Richardson

1
Entgeht diese Syntax automatisch einfachen Anführungszeichen innerhalb des [Array von Werten]?
WiredIn

1
Wenn mein Array groß genug ist, nimmt die Methode viel Zeit in Anspruch. Wie könnte man das mit wirklich großen Arrays machen?
jgomo3


6

Zur besseren Lesbarkeit kann dies noch weiter vereinfacht werden, um:

Model.find_by(id: [array of values])

Dies entspricht der Verwendung where, ist jedoch expliziter:

Model.where(id: [array of values])

find_byist eigentlich where().take. Model.find_by(id: [1, 2, 3])wird nur zurückkehrenModel(id: 1)
James.Oliver

Eine weitere Option, wenn Sie nur nach einem einzelnen Datensatz anstelle des Arrays suchen, das die Kriterien erfüllt.find_by_id([1, 2, 3])
Steve,

2

Sie können den Operator 'in' verwenden:

Model.in(id: [array of values])

0

Wenn Sie nach einer Abfrage in Mongoid suchen, ist dies die richtigeModel.where(:field.in => ["value1", "value2"] ).all.to_a


0

Es gibt einen 'kleinen' Unterschied zwischen where und find_by .

find_by gibt nur einen Datensatz zurück, wenn er gefunden wird, andernfalls ist er gleich Null.

Findet den ersten Datensatz, der den angegebenen Bedingungen entspricht. Es gibt keine implizite Bestellung. Wenn die Bestellung wichtig ist, sollten Sie sie selbst angeben. Wenn kein Datensatz gefunden wird, wird null zurückgegeben.

  def find_by(*args)
      where(*args).take
    rescue RangeError
      nil
  end

mittlerweile , wo es eine Beziehung zurückkehren

Gibt eine neue Beziehung zurück, die das Ergebnis des Filterns der aktuellen Beziehung gemäß den Bedingungen in den Argumenten ist.

In Ihrer Situation lautet der entsprechende Code also:

Model.where(id: [array of values])
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.