Bonjour, J'essaie de récupérer TOUS les champs d'une table (qui en contient beaucoup !), ainsi qu'un sous-ensemble de ces mêmes champs que je vais renommer (pour des questions d'i18n). Ceci équivaudrait à la requête SQL suivante : SELECT *, NAME_FR AS NAME, DESC_FR AS DESCRIPTION FROM MATABLE; Le problème est que cette requête est erronée (seulement dans Oracle ?). Y a-t-il un moyen d'effectuer cette requête via la fonction find de Rails ? Merci, Christophe.
on 22.02.2008 11:07
on 22.02.2008 13:35
Bonjour Le problème c'est que la fonction find ne te renvoie pas une liste de valeurs, mais utilise ces valeurs pour initialiser ton modèle. Pour faire ce que tu veux, tu peux: -rajouter dans ton modèle des méthodes du genre: def name self[:name_fr] end def description self[:desc_fr] end -ou bien si tu veux vraiment obtenir une liste des valeurs, sans objets instanciés par rails, tu peux utiliser ActiveRecord: sql = MonModele.send(:construct_finder_sql, :select => "*, NAME_FR AS NAME, DESC_FR AS DESCRIPTION") r = ActiveRecord::Base.connection.select_all(sql) On 22/02/2008, Chris Gers32 <list-incoming@andreas-s.net> wrote: > > > > > -- Baptiste
on 25.02.2008 10:17
Bonjour Baptiste,
Ta première solution est exactement ce qu'il me faut, car je récupère
un objet qui est ensuite transformé en XML.
J'ai donc créé la méthode suivante dans le modèle :
def description
self[:desc_fr]
end
et dans le contrôleur, j'ai :
def by_id_xml
@mon_modele = MonModele.find( params[:id] )
render :xml => @mon_modele.to_xml
end
Malheureusement, la méthode by_id_xml renvoie toujours la même
structure XML, avec tous les champs de la table, mais sans le nouveau
champ "description"... Est-ce dû au fait que description soit une
méthode et non un champ ? Et dans ce cas, y a-t-il un moyen de dire à
ActiveRecord d'ajouter ce champ à son modèle ? La question est peut-
être basique, mais je débute Rails...
Merci,
Christophe.
on 25.02.2008 12:26
Le 25/02/08, gers32<cbu.kitry@gmail.com> a écrit : > render :xml => @mon_modele.to_xml > end > > Malheureusement, la méthode by_id_xml renvoie toujours > la même structure XML, avec tous les champs de la table, > mais sans le nouveau champ "description"... Est-ce dû au fait > que description soit une méthode et non un champ ? Et dans ce > cas, y a-t-il un moyen de dire à ActiveRecord d'ajouter ce champ > à son modèle ? Tu as l'option :methods. @mon_modele.to_xml, :methods => [ :description ] > La question est peut-être basique, mais je débute Rails... (Au fait, t'as répondu à mon sondage sur le BarCamp Rails parisien http://www.polldaddy.com/s/7BAC374D75039925/ ? :) -- Jean-François. -- Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org )
on 27.02.2008 11:23
Merci Jean-François, ça marche. Oui, j'ai répondu au sondage. Le Bar Camp m'intéresserait mais malheureusement, je vis dans le Gers et avec deux filles en bas âge, tout déplacement devient une expédition ! En revanche, quelque chose près de Toulouse ou Bordeaux... Y a-t-il une communauté RoR dans le Sud-Ouest ? Christophe.
on 27.02.2008 12:06
Maintenant je fais face à un problème dérivé de celui ci-dessus... Mon code Rails est le suivant : ########################## @mes_donnees = MaTable.find( :all, :select => "ID, CODE, DESC_FR AS DESCRIPTION_I18N", :conditions => conditions_list) @mes_donnees_i18n = @mes_donnees.to_xml :methods => [:description_i18n] render :xml => @mes_donnees_i18n ########################## La structure XML que je récupère ne contient pas de valeur pour le champ DESCRIPTION_I18N, alors que si je supprime le :select, j'ai la bonne valeur... Malheureusement, j'ai un grand nombre de champs dans cette table et dois restreindre le nombre de ceux que je récupère. Est-ce que le contenu de mon :select (notamment le AS) est erroné ? Merci, Christophe.
on 29.02.2008 16:13
Mon problème est résolu : il ne fallait pas créer la variable DESCRIPTION_I18N dans la requête SQL, puisqu'elle est créée dans le to_xml() qui s'attend par contre à trouver DESC_FR dans le résultat de la requête. J'ai donc supprimé "AS DESCRIPTION_I18N" et ça marche ! Merci Fred du forum "Ruby on Rails". Christophe.