Bonjour,
Je me suis mis à rails 3 (enfin) et j'ai un peu de mal à trouver de la
documentation sur arel et son utilisation avec Rails 3(.2.1)
En fait j'ai actuellement un double problème que je n'arrive pas à
résoudre
J'ai deux model (notez le fait que le nom de mes tables ne
correspondent pas au nom de mes modèles)
class Etablissement < ActiveRecord::Base
self.table_name = "tbd_fefe"
has_many :demande_interventions
end
class DemandeIntervention < ActiveRecord::Base
self.table_name = "tbd_dis"
belongs_to :etablissement
end
je veux récupérer les DemandeIntervention dont l'id (integer) contient
une chaîne de caractères passée en paramètre ou dont le numéro
d'etablissement contient cette même chaine, voici comment je construis
ma requête
di = DemandeIntervention.arel_table # nécessaire car nom modèle
différent de nom table
et= Etablissement.arel_table # nécessaire car nom modèle
différent de nom table
@demande_interventions =
DemandeIntervention.includes(:etablissement).where(di[:id].matches("%#{params[:term]}
%").or(et[:numero].matches("%#{params[:term]}
%"))).order(di[:id]).paginate(:page => params[:page], :per_page =>
100)
Peut être que je m'y prend mal mais j'ai deux problèmes:
1- di[:id].matches("%#{params[:term]}%") me sort un "like 0"
probablement car j'essaye de comparer un entier avec une chaine
2- .order(di[:id]) j'aimerais trier par ordre descendant et il faut
que je précise le nome de la table (di) car id est ambigu mais je ne
veux pas écrire "order tbd_dis.id DESC" pour ne pas avoir d'adhérence
si le nome de la table venait à changer.
une autre question: la syntaxe utilisée permet-elle d'éviter les
injection sql?
Merci de votre aide, un simple pointeur vers une documentation avec
des exemples serait déjà bien, car j'ai cherché mais je ne trouve des
réponses parcellaires (comme le fait de récupérer les noms de tables
pour Arel)
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse
[email protected]