2010-07-16 3 views
0

J'ai créé un modèle pour une table existante en utilisant la commande générateur suivant:Problèmes d'utilisation modèle ActiveRecord sur la table existante

script/generate model Group 

Le tableau en question ont un nom différent, donc j'ai changé le modèle compte pour cela. Puis j'ai allumé la console pour voir si tout fonctionnait correctement. Mais, à ma grande surprise, l'utilisation de ce modèle dans une vue jette des erreurs étranges. Je suis retourné à la console pour vous assurer que je n'étais pas halluciner et voici ce qui est arrivé:

>> Group.first 
#<Group login: "XXXXXX", ...> 
>> Group.first.login 
NoMethodError: undefined method `generated_methods' for 50:Fixnum 
     from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/attribute_methods.rb:247:in `method_missing' 
     from (irb):2 

Après que la première expression ne fonctionne plus:

>> Group.first 
NoMethodError: undefined method `column_names' for 50:Fixnum 

Toutes les colonnes sont soit varchar ou int, D'où vient ce type 50:Fixnum?

Merci

+0

Quelle est la sortie de 'Group.first.methods - Object.methods'? – ehsanul

+0

Lorsque vous ratissez schéma: vider votre base, qu'est-ce que la table ressemble? – dmajkic

Répondre

0

Enfin, j'ai fait une énorme erreur, ou plus précisément négligé un détail important! C'est un simple conflit de nom de colonne, je les ai passés en revue pour des problèmes potentiels, mais j'ai manqué un enterré dans les 26 autres. Cette colonne malveillante a été nommée class et une fois qu'AR a généré son code magique après avoir accédé à n'importe quelle colonne, il a simplement remplacé la méthode de classe vitale sans émettre d'erreur.

Je me attendais peu comme nom heurtait les noms de colonnes semblaient tous écrits en français, n'a donc pas pris assez de temps et doit avoir lu « classe » ou quelque chose comme ça. Méfiez-vous du puissant affrontement!

Merci à Ehsanul et dmajkic pour me faire examiner ces noms de colonnes une deuxième fois.

+0

« Vous pouvez accepter votre propre réponse dans 2 jours » Eh bien, c'est une règle bizarre! –

0

Utilisez-vous Mysql? Le groupe est un mot clé sql réservé. Il semble que Rails 2.3.5+ gère cela pour mysql, mais cela peut être à l'origine du problème que vous voyez sur d'autres bases de données ou d'autres versions de Rails.

+0

Le nom de colonne est différent, donc MySQL (je l'espère) ne saura jamais sur le nom de la classe modèle. –

+0

Je voulais dire le nom de la table, pas le nom de la colonne, dans le commentaire précédent. –

Questions connexes