Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将Rails 2.3.8应用程序升级到Rails 3.0.1,无法在任何型号上调用create_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 将Rails 2.3.8应用程序升级到Rails 3.0.1,无法在任何型号上调用create

Ruby on rails 将Rails 2.3.8应用程序升级到Rails 3.0.1,无法在任何型号上调用create,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正试图从2.3.8升级到3.0.1,但这个问题困扰了我很长一段时间,阻碍了进一步的进展。任何从我的模型创建内容的尝试(例如,从控制台调用Subject.create!)都会导致以下错误: 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' fr

我正试图从2.3.8升级到3.0.1,但这个问题困扰了我很长一段时间,阻碍了进一步的进展。任何从我的模型创建内容的尝试(例如,从控制台调用Subject.create!)都会导致以下错误:

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
NoMethodError:0:Fixnum的未定义方法“name”
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/relations.rb:159:in'insert'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/relation.rb:14:在“插入”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/persistence.rb:271:in“create”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/timestamp.rb:47:在“创建”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/callbacks.rb:281:在“创建中的块”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active\u support/callbacks.rb:413:在“运行\u创建\u回调”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/callbacks.rb:281:in'create'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/persistence.rb:247:在“创建或更新”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/callbacks.rb:277:in`block in create\u或\u update'
from/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.1/lib/active\u support/callbacks.rb:413:在“运行保存”回调中
... 1级。。。
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/persistence.rb:56:in'save!'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/validations.rb:49:in'save!'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/attribute\u methods/dirty.rb:30:in'save!'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/transactions.rb:242:in`block in save!'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/transactions.rb:289:in`block in with\u transaction\u returning\u status'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/connection\u adapters/abstract/database\u语句。rb:139:在“事务”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/transactions.rb:204:在“事务”中
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/transactions.rb:287:in“with\u transaction\u returning\u status”
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/transactions.rb:242:in'save!'
from/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.1/lib/active\u record/validations.rb:34:in'create!'
来自(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`'
来自脚本/rails:6:in'require'
来自script/rails:6:in`'ruby-1.9.2-p0
阿雷尔似乎没有得到一个合适的工作关系,但我不知道这是什么原因造成的。有什么想法吗

谢谢


Ryan

我建议在arel中添加一些调试语句。编辑堆栈跟踪最后一行中的engine.rb。我认为您必须重新启动控制台(而不仅仅是重新加载!)才能看到arel文件中的更改

以下是engine.rb中有问题的行:

attribute = relation.record.detect { |attr, _| attr.name.to_s == relation.primary_key.to_s }
也许可以尝试打印attr名称,看看是否有任何东西通过数组检测方法。或者打印出“attr”的类。该类应该是“Arel::Attribute”,但显然有一个Fixnum以某种方式传入其中

attribute = relation.record.detect do |attr, _|
   p attr.class
   p attr.name
   attr.name.to_s == relation.primary_key.to_s
end
只是一个猜测,但我想可能是插件/宝石干扰了您模型中的某些东西。您是否使用任何直接与ActiveRecord关联的依赖项


另一个好的练习是用一个模型创建一个空白的Rails 3应用程序(没有gems或插件依赖项),看看是否会出现同样的错误。这将排除您的开发环境中的某些内容。如果这样做行得通,那么也许你可以开始从另一个应用程序中逐个删除一些依赖项,看看是不是其中一个导致了错误。

你使用的是什么版本的Ruby?它应该是
1.8.7
1.9.2
。我在
1.9.1

上也遇到过类似的莫名其妙的问题,你能为主题发布你的模型代码吗?主题实际上是一个非常复杂的模型,但问题发生在应用程序中的每个模型上。这里有一个非常简单的模型也有同样的问题:DataType1),它应该是Subject.create!(:user_id=>1)或Subject.create!(:user=>user.find(1))不,对不起,我只是用它作为一个简单的例子。更准确的例子是,如果我尝试调用DataType.create!(:name=>String')。数据类型的表只有一个id和一个名称。但不管我是否传递任何参数,错误都会发生。我很抱歉没有对我最初的示例进行更清楚的说明。现在您提到插件/gem问题似乎很有可能。我会和他们混在一起,看看会发生什么。我不认为任何插件都应该绑定