web-dev-qa-db-fra.com

ActiveRecord où field =? tableau de valeurs possibles

Je veux faire

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

Comment puis-je effectuer cette recherche sans enchaîner les déclarations OR ensemble?

45
quantumpotato

De ici cela semble être fait en utilisant une instruction SQL in:

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

Ou plus simplement, comme l'a souligné kdeisz (Utiliser Arel pour créer la requête SQL):

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

Extrait du Guide d'interface de requête ActiveRecord

Si vous souhaitez rechercher des enregistrements à l'aide de l'expression IN, vous pouvez transmettre un tableau au hachage des conditions:

Client.where(orders_count: [1,3,5])
15
messanjah

Pour des raisons de lisibilité, ceci peut être simplifié encore davantage:

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

Ceci équivaut à utiliser where, mais est plus explicite:

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

Il y a une 'petite' différence entre et find_by.

find_by renverra un seul enregistrement s'il est trouvé, sinon ce sera nil.

Trouve le premier enregistrement correspondant aux conditions spécifiées. Il n'y a pas de commande implicite, donc si la commande est importante, vous devez la spécifier vous-même. Si aucun enregistrement n'est trouvé, renvoie zéro.

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

en attendant il retournera une relation

Retourne une nouvelle relation, qui résulte du filtrage de la relation actuelle en fonction des conditions des arguments.

Donc, dans votre situation, le code approprié est:

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

Si vous recherchez une requête dans mongoid, c'est le oneModel.where(:field.in => ["value1", "value2"] ).all.to_a

0
Prithviraj Pillai