7
votes

Enregistrement actif trouvez par colonne 'ou' rails

est-il possible d'effectuer une requête Find_By en utilisant une déclaration 'ou'? Par exemple: xxx

comme quelque chose comme (ne fonctionne pas): xxx

merci!


1 commentaires

Comment prendriez-vous une de ces réponses et créeriez-vous un produit.find_by_code ?


7 Réponses :


9
votes

n'utilise pas les méthodes ActiveRecord

Cela pourrait fonctionner: P>

code = params[:code]
@product = Product.find(:all, :conditions => ["upc = ? or cspc = ?", code, code])


1 commentaires

Merci Nicholas! Exactement ce que je cherchais.



1
votes

Autant que je sache, les rails ne prennent pas de support automatique ni résultats, hors de la boîte. Mais le SearchLogic GEM semble prendre en charge cette fonctionnalité. Voir ici


1 commentaires

Oui, c'était ce que je pensais. J'ai examiné le joyau de la recherche-logique et je l'ai utilisé dans le passé. Merci pour la réponse.



1
votes

J'ai déjà eu un problème similaire.

Un moyen de s'approcher, c'est essayer de déterminer le type de données que vous obtenez en premier lieu. Écrivez du code qui vous dira la différence.

peut-être voir s'il existe un moyen de distinction entre UPC et CSPC.


1 commentaires

Bon point. Je pourrais jeter un oeil à l'ajout d'une vérification de la longueur (les codes UPC-A sont tous de 12 caractères et les CSPC sont 6 ou 7, je crois). Merci.



6
votes

Nettoyage du code NICHOLAS:

@products = Product.all(:conditions => ["upc = :code or cspc = :code", {:code => params[:code]}])


1 commentaires

Merci Omar pour la belle réfractaire. J'ai fini par faire cela pour nettoyer un peu le code.



2
votes

Si vous utilisez Arel sur Rails 3:

t = Product.arel_table

@products = Product.where(
  t[:upc].eq(params[:code])       \
  .or(t[:cspc].eq(params[:code]))
)

@product = @products.first if @products.size == 1


0 commentaires

19
votes

AS des rails 5, une façon de le faire est la suivante:

pour le premier enregistrement correspondant: xxx

pour tous les enregistrements correspondants: xxx


0 commentaires

2
votes

AS des rails 6, ActiveRecord a un 0 commentaires