Je veux faire
Model.where('id = ?', [array of values])
Comment puis-je effectuer cette recherche sans enchaîner les déclarations OR ensemble?
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])
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])
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])
Il y a une 'petite' différence entre où 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 où 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])
Si vous recherchez une requête dans mongoid, c'est le oneModel.where(:field.in => ["value1", "value2"] ).all.to_a