Bonjour, Je vous explique mon probleme : J'ai une table "line_items" avec comme attribut "product_id" et "order_id" qui son des clé etrangere sur mes tables "product" et "order". J'aurai voulu savoir comment il ete possible de savoir de quel class etait mes attribut "product_id" et "order_id"? En fait je voudrai qu'il me retourne product_id -> class product et order_id -> class order J'ai essayer LineItem.new.product_id.class et LineItem.new.order_id.class mais ca me retorune nilClass Pouvez vous m'aider svp????
on 04.03.2008 18:50
on 04.03.2008 19:07
On Tue, Mar 4, 2008 at 6:50 PM, Richard Vincent <list-incoming@andreas-s.net> wrote: > etait mes attribut "product_id" et "order_id"? > > En fait je voudrai qu'il me retourne product_id -> class product et > order_id -> class order > > J'ai essayer LineItem.new.product_id.class et > LineItem.new.order_id.class mais ca me retorune nilClass > > Pouvez vous m'aider svp???? Si ce n'est déjà fait, il faut que tu ajoutes des relations entre tes modèles. Dans ton cas : line_item.rb: belongs_to :product belongs_to :order order.rb: has_many :line_items product.rb: has_many :line_items Dans ton code, tu instancie un nouvel LineItem qui aura tous ses attributs à nil et auront donc comme classe la classe Nil. Si tu veux le faire sur une instance : my_line_item = LineItem.find(:first) my_line_item.product.class Tu peux aussi le faire sur la classe LineItem directement, une fois les relations écrites : LineItem.reflections[:product].class_name Il doit y avoir un moyen plus propre, mais je ne me rappelle plus comment retrouver le nom de la classe. -- Fabien Jakimowicz
on 04.03.2008 19:23
oui j'ai deja fait mes relations et ce que tu a dis fonctionne tres bien. par contre j'ai encore un souci, c'est comment savoir si je peut appeler la methode : LineItem.reflection[:product_id].class_name par example j'ai un attribut "price" dans ma table mais je ne peut pas appeler LineItem.reflection[:price].class_name ce qui est normal donc je ne sais pas comment faire pour differencier les attribut de cle etrangere des autres???
on 04.03.2008 19:47
On Tue, Mar 4, 2008 at 7:23 PM, Richard Vincent <list-incoming@andreas-s.net> wrote: > donc je ne sais pas comment faire pour differencier les attribut de cle > etrangere des autres??? Teste le sur un attribut et non sur une relation, tu verras que le hash ne contient que des relations et non des attributs ;) -- Fabien Jakimowicz
on 04.03.2008 19:54
Excuse moi mais je debure en ruby on rails j'ai pas copris ce que tu a voulu me dire... :s peut tu me rexpliquer?
on 05.03.2008 13:49
j'ai finalement compris ce que tu as voulu me dire et ca fonctionne. Par contre, je fait un "column_names" pour recuperer les attribut de ma class et un "reflection" pour avoir mes clef etrangere. Donc dans "columns_name" j'ai "order_id" et "product_id" mais dans "reflection" j'ai "order" et "product" et je sais pas comment faire correspondre les 2? Je sais que par convention les cles etrangeres se nomme "class_id" mais si quelqu'un fait autrement mon prjet ne fonctionnera pa.... Est ce que quelqun a une idée?
on 05.03.2008 15:49
On Wed, Mar 5, 2008 at 1:49 PM, Richard Vincent <list-incoming@andreas-s.net> wrote: > Je sais que par convention les cles etrangeres se nomme "class_id" mais > si quelqu'un fait autrement mon prjet ne fonctionnera pa.... > > Est ce que quelqun a une idée? > > regarde les objets retournés via la reflection, tu as plein d'attributs notamment le nom de la colonne avec laquelle est faite la liaison. Tu n'as plus qu'a éliminer ces colonnes lors de ton parcours du column_names et hop. -- Fabien Jakimowicz