Rails de MySQL ILIKE requête
Ma syntaxe est éteint. Je veux créer un champ by_name
qui trouve tous les agencies
dont le nom de l'attribut contenant le passé dans la chaîne (insensible à la casse).
Voici ce que j'ai:
class Agency < ActiveRecord::Base
scope :by_name, ->(agency_name) { where('name ILIKE ?', "%#{agency_name}%") }
end
Dans la console rails de type I dans agencies = Agency.by_name("foo")
. Voici la requête générée:
SELECT `agencies`.* FROM `agencies` WHERE (name ILIKE '%foo%')
Voici le message d'erreur:
Mysql2::Erreur: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre serveur MySQL version pour le droit
la syntaxe à utiliser près de " ILIKE '%foo%')
OriginalL'auteur Neil | 2015-12-01
Vous devez vous connecter pour publier un commentaire.
Je pense qu'il devrait être:
C'est dans PostgreSQL le mot-clé ILIKE peut être utilisé au lieu de faire de la correspondance de la casse, selon la langue active. Ce n'est pas dans le standard SQL, mais est une extension PostgreSQL.
Dans MySQL, vous n'avez pas ILIKE. La caisse MySQL docs sur la chaîne des fonctions de comparaison.
Bonus - vous pouvez également utiliser Arel. Prendre un coup d'oeil:
OriginalL'auteur Andrey Deineko
Pourquoi oui, parce que il n'y a pas une telle chose comme
ILIKE
dans MySQL. SeulementLIKE
. Vous avez peut-être vuILIKE
comme un casse version deLIKE
dans PostgreSQL, mais votre SGBDR est différent.Votre meilleur pari est d'utiliser
LOWER
sur les deux côtés afin de réaliser le plus d'effet équivalent:De crédit à @mu est trop court pour son réponse.
Que faire si je veux permettre à l'utilisateur de rechercher avec une sensibilité à la casse drapeau allumé ou éteint?
OriginalL'auteur D-side