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