2010-11-02 4 views
0

J'essaie de passer de la version 2.3.8 à la version 3.0.1, mais ce problème me tourmente et m'empêche d'aller plus loin c'est l'heure. Toute tentative de créer quelque chose de mes modèles entraîne toujours cette erreur (appel Subject.create de la console, par exemple!):Mise à niveau de l'application Rails 2.3.8 vers Rails 3.0.1, impossible d'appeler create sur tous les modèles

NoMethodError: undefined method `name' for 0:Fixnum 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/engines/sql/engine.rb:26:in `block in create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/engines/sql/engine.rb:26:in `each' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/engines/sql/engine.rb:26:in `detect' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/engines/sql/engine.rb:26:in `create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/algebra/relations/writes.rb:24:in `call' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/session.rb:17:in `create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/arel-1.0.1/lib/arel/algebra/relations/relation.rb:159:in `insert' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/relation.rb:14:in `insert' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/persistence.rb:271:in `create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/timestamp.rb:47:in `create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/callbacks.rb:281:in `block in create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/callbacks.rb:413:in `_run_create_callbacks' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/callbacks.rb:281:in `create' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/persistence.rb:247:in `create_or_update' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/callbacks.rb:277:in `block in create_or_update' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active_support/callbacks.rb:413:in `_run_save_callbacks' 
... 1 levels... 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/persistence.rb:56:in `save!' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/validations.rb:49:in `save!' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/attribute_methods/dirty.rb:30:in `save!' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/transactions.rb:242:in `block in save!' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/transactions.rb:289:in `block in with_transaction_returning_status' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/connection_adapters/abstract/database_statements.rb:139:in `transaction' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/transactions.rb:204:in `transaction' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/transactions.rb:287:in `with_transaction_returning_status' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/transactions.rb:242:in `save!' 
from /.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active_record/validations.rb:34:in `create!' 
from (irb):1 
from /.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in `start' 
from /.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in `start' 
from /.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>'ruby-1.9.2-p0 

Il semblerait Arel ne reçoit pas une relation appropriée pour travailler avec, mais je Je suis perdu quant à ce qui cause cela. Des idées?

Merci!

Ryan

+0

Pouvez-vous poster votre code de modèle pour le sujet? – johnmcaliley

+0

Bien sujet est en fait un grand modèle compliqué, mais le problème se produit avec chaque modèle dans l'application. Voici un modèle très simple qui a le même problème: DataType Ryan

+0

et vous appelez Subject.create! sans aucun paramètre? – johnmcaliley

Répondre

0

Je recommande de mettre quelques instructions de débogage à l'intérieur Arel. Editez le fichier engine.rb dans la dernière ligne de la trace de la pile. Je pense que vous devrez redémarrer la console (pas simplement recharger!) Pour voir les changements dans le fichier arel.

Voici la ligne incriminée dans engine.rb:

attribute = relation.record.detect { |attr, _| attr.name.to_s == relation.primary_key.to_s } 

Peut-être essayer d'imprimer les noms attr et voir si quelque chose passe à travers le tableau de détecter la méthode. Ou imprimez la classe du "attr". La classe devrait être "Arel :: Attribute", mais de toute évidence, un Fixnum y passe d'une manière ou d'une autre. Juste une supposition mais je pense que peut-être un plugin/gem interférer avec quelque chose dans vos modèles. Utilisez-vous des dépendances liées directement à ActiveRecord?

Un autre bon exercice serait de créer une application Rails 3 vierge (sans gemmes ou dépendances de plugin) avec un modèle et de voir si vous obtenez les mêmes erreurs. Cela exclurait quelque chose dans votre environnement de développement. Ensuite, si cela fonctionne, alors peut-être vous pouvez commencer à supprimer certaines des dépendances une par une de l'autre application et voir si l'un d'eux cause l'erreur.

+0

Problèmes de plugin/gem semble vraiment très probable maintenant que vous le mentionnez. Je vais jouer avec eux et voir ce qui se passe. Ne pensez pas que des plugins devraient être liés à ActiveRecord, la seule chose à laquelle je peux penser est meta_search, que j'ai juste jeté dans l'application pour remplacer searchlogic, qui est cassé dans Rails 3. Encore mystérieux car je peux interroger des objets comme toujours ; c'est simplement les mettre à jour qui ne fonctionne pas. Lors du débogage du moteur.rb, la clé de hachage était un Fixnum de 0, et la valeur de hachage était un tableau contenant un objet "Arel :: Attribute" rempli d'objets Arel :: Sql et ActiveRecord. Merci! – Ryan

+0

A commencé une nouvelle application Rails 3 à partir de zéro et la création d'objets a bien fonctionné. Ajouté les mêmes plugins/gemmes et ça marchait bien. Donc, je reste perplexe pour l'instant ... – Ryan

+0

En utilisant l'application rails3 rails et en copiant vos fichiers/app et/config à partir de vos rails 2 projet pourrait être la meilleure option ici. J'ai en fait trouvé que c'était un moyen plus facile de mettre à niveau que d'essayer de convertir le projet existant en utilisant le plugin de mise à niveau. Vous pouvez également copier quelques peices à la fois et cela pourrait vous aider à affiner ce qui le brise. – johnmcaliley

0

Quelle version de Ruby utilisez-vous? Ce devrait être 1.8.7 ou 1.9.2. J'ai eu des problèmes inexplicables similaires avec 1.9.1.

+0

Alors que mon système a 1.8.7 installé, j'utilise 1.9.2-p0 par rvm pour cette application. – Ryan

+0

Etes-vous sûr que rvm utilise les bonnes gemmes? Exécutez 'which ruby' et' which rails' à vérifier. – nfm

+0

Les deux semblent être bien, ruby ​​1.9.2-p0 et rails 3.0.1 – Ryan

Questions connexes