Comment recupere la classe d'un attribut de clé etrangere

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 Tue, Mar 4, 2008 at 6:50 PM, Richard Vincent
[email protected] 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 J.

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???

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 Tue, Mar 4, 2008 at 7:23 PM, Richard Vincent
[email protected] 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 :wink:

Fabien J.

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 Wed, Mar 5, 2008 at 1:49 PM, Richard Vincent
[email protected] 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 J.