升级到Rails 3后NilClass:未定义的方法“接受”的零(Undefined method

2019-09-21 02:05发布

我刚刚升级从Rails的2.3.8我的Rails应用程序到Rails 3.2.7,我偶然发现了问题的ActiveRecord运行。

如果我尝试在所有(例如:Employee.last)与ActiveRecord的访问我的数据库,我收到以下错误:

NoMethodError: undefined method `accept' for nil:NilClass
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:40:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:37:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:171:in `exec_queries'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:160:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:33:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:159:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:378:in `find_first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:122:in `first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:336:in `find_one'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:107:in `find'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `__send__'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `find'

我使用Rails 3.2.7与1.8.7红宝石。 我以前使用mysql 2.7版本,但升级时面临的错误,所以我现在用的mysql2(0.311),以及ActiveRecord的-myql2适配器(0.0.3)。

这个问题似乎与此类似:

导轨3:Model.all => NoMethodError:未定义方法'接受'的零:NilClass

但我想介绍那里的所有解决方案,并没有一次成功。

编辑:如果我拿出的ActiveRecord-mysql2适配器“的宝石,我得到以下错误信息。

Address Load (0.7ms)  SELECT `addresses`.* FROM `addresses` LIMIT 1
NoMethodError: undefined method `generated_methods?' for #<Class:0x7f10733eb2e8>
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/dynamic_matchers.rb:50:in `method_missing'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/markos_validates_timeliness-2.3.2.2/lib/validates_timeliness/active_record/attribute_methods.rb:46:in `define_attribute_methods'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/attribute_methods.rb:168:in `respond_to?'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activesupport-3.2.7/lib/active_support/callbacks.rb:398:in `__run_callback'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activesupport-3.2.7/lib/active_support/callbacks.rb:385:in `_run_find_callbacks'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activesupport-3.2.7/lib/active_support/callbacks.rb:81:in `send'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activesupport-3.2.7/lib/active_support/callbacks.rb:81:in `run_callbacks'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/base.rb:523:in `init_with'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/inheritance.rb:68:in `instantiate'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `collect!'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:40:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:37:in `find_by_sql'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:171:in `exec_queries'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:160:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/explain.rb:33:in `logging_query_plan'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation.rb:159:in `to_a'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:378:in `find_first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:122:in `first'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `__send__'
from /home/aneyer/.rvm/gems/ruby-1.8.7-p370@rails3/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `first'

Answer 1:

弄清楚了。 原来定制的宝石有人发前很长一段时间引起了一些错误。 移除宝石固定它。

对于那些谁也有类似的问题,请确保您删除的ActiveRecord-mysql2适配器'宝石。 这是什么原因造成了最初的问题。



Answer 2:

我在Gemfile中改变的ActiveRecord-mysql2适配器“到“mysql2”,那么它的工作



文章来源: Undefined method 'accept' for nil:NilClass after upgrading to Rails 3