Bonjour,
Je voudrais ajouter dans un annuaire une action listant des personnes
par département. Pour cela, je voudrais m’inspirer de cette action qui
les liste par code postal :
def postcode
@people = Person.find(:all, :conditions => [“postcode = ?”,
params[:id]])
render :template => ‘people/index’
end
J’ai donc ajouté dans mon contrôleur cette action :
def department
@people = Person.find(:all, :conditions => [“postcode = ?”,
params[:id]])
render :template => ‘people/index’
end
Cependant, je ne sais pas comment écrire la requête pour qu’elle
consulte les 2 premiers caractères du champ “postcode” de chaque entrée
(afin d’en déduire le code départemental).
Merci pour votre aide.
bonjour,
un truc du style :
:conditions => [“postcode REGEXP "^??"”, params[:id][0…2]]
2008/6/13 Zangief I. [email protected]:
2008/6/13 guillaume belleguic [email protected]:
bonjour,
un truc du style :
:conditions => [“postcode REGEXP "^??"”, params[:id][0…2]]
Je crois que REGEXP n’est pas une fonction sur toute les BDD. J’aurais
plus fait un postcode LIKE “?%”
@people = Person.find(:all, :conditions => [“postcode = ?”,
end
–
Cyril M.
guillaume belleguic wrote:
bonjour,
un truc du style :
:conditions => [“postcode REGEXP "^??"”, params[:id][0…2]]
Merci pour votre réponse. Je viens d’essayer et voici la mise à jour de
mon action :
def department
@people = Person.find(:all, :conditions => [“postcode REGEXP
"/^[0-9]{2}/"”, params[:id]])
render :template => ‘people/index’
end
J’ai légèrement modifié l’expression régulière. Normalement ça devrait
fonctionner. Seulement lorsque j’exécute l’action (via l’adresse :
http://0.0.0.0:3000/people/department/75), je n’obtiens aucun résultat
(contrairement à l’autre action :
http://0.0.0.0:3000/people/postcode/75013).
Est-ce qu’il y a quelque chose que j’ai loupé ? Oo
Merci à vous 
Le 13 juin 2008 17:10, Zangief I. a écrit :
Cependant, je ne sais pas comment écrire la requête pour
qu’elle consulte les 2 premiers caractères du champ “postcode”
de chaque entrée (afin d’en déduire le code départemental).
Questions bêtes : ça va marcher avec la Corse ? La Guadeloupe ?
La Nouvelle-Calédonie ?
– Jean-François.
–
http://twitter.com/underflow_
Oops, je crois savoir pourquoi ça n’a pas fonctionné. En regardant les
logs, la requête est générée de cette façon :
SELECT * FROM people
WHERE (postcode LIKE “‘75’%”)
Il faudrait que j’enlève les simples cotes autour du numéro de
département…
Voici la modification :
@people = Person.find(:all, :conditions => “postcode LIKE
“#{params[:id]}%””)
Jean-François Trân wrote:
Questions b�tes : �a va marcher avec la Corse ? La Guadeloupe ?
La Nouvelle-Cal�donie ?
Normalement oui, ça devrait, car les départements sont identifiés en
tant que chaîne de caractères. Ainsi, les départements avec des
caractères comme le département de la Corse-du-Sud qui correspond à “2A”
devrait être accessible.
2008/6/13 Zangief I. [email protected]:
Voici la modification :
@people = Person.find(:all, :conditions => “postcode LIKE
"#{params[:id]}%"”)
WARNING
SQL Injection detected
WARNING
–
Cyril M.
Le 13 juin 2008 18:42, Zangief I. a écrit :
Jean-François Trân wrote:
Questions bêtes : ça va marcher avec la Corse ? La Guadeloupe ?
La Nouvelle-Calédonie ?
Normalement oui, ça devrait, car les départements sont identifiés
en tant que chaîne de caractères. Ainsi, les départements avec
des caractères comme le département de la Corse-du-Sud qui
correspond à “2A” devrait être accessible.
Mais les codes postaux corses ne sont pas en 20 000 quelque chose ?
– Jean-François.
–
http://twitter.com/underflow_
Cyril M. wrote:
2008/6/13 Zangief I. [email protected]:
Voici la modification :
@people = Person.find(:all, :conditions => “postcode LIKE
"#{params[:id]}%"”)
WARNING
SQL Injection detected
WARNING
J’ai mis ça pour éviter les débordements 
code = params[:id].to_i
code = code.to_s
code = ‘0’ + code if code.length == 1
@people = Person.find(:all, :conditions => “postcode LIKE "#{code}%"”)