Je suis en train de passer tant sur le terrain et la valeur d'un appel découverte:Est-il possible d'avoir des conditions de recherche variables pour la clé et la valeur?
@employee = Employee.find(:all,
:conditions => [ '? = ?', params[:key], params[:value].to_i)
La sortie est
SELECT * FROM `employees` WHERE ('is_manager' = 1)
qui ne retourne aucun résultat, mais lorsque je tente ce directement dans mysqsl en utilisant le même appel sans le '' is_manager, ça marche bien. Comment puis-je convertir mes params [: key] valeur à un symbole de sorte que l'appel SQL résultant ressemble:
SELECT * FROM `employees` WHERE (is_manager = 1)
Merci, D
Correction de l'erreur de syntaxe dans le code. –
Je pense toujours que c'est une mauvaise idée du point de vue de la sécurité. – konung
Ceci est une solution générique. L'utilisateur peut avoir un hash de clé valide et l'utiliser pour la validation (au lieu de columns_hash). Son problème d'origine est dû au fait que le nom col a été substitué en utilisant les variables bind et que les rails ont entouré les noms de col avec des guillemets. Ceci ne sera pas adressé en passant un symbole (au lieu d'une chaîne) pour le paramètre de nom de col. J'ai ajouté la validation 'columns_hash' comme ligne de guide pour ajouter une vérification pour limiter les noms de colonnes à un ensemble connu. Cela devrait être un problème de sécurité. –