2012-08-09 59 views
4

我刚刚将Rails应用程序从Rails 2.3.8升级到了Rails 3.2.7,并且我遇到了Activerecord的问题。升级到Rails 3后,未定义的方法“接受”nil:NilClass

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

NoMethodError: undefined method `accept' for nil:NilClass 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/database_statements.rb:18:in `select_all' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/querying.rb:38:in `find_by_sql' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/explain.rb:40:in `logging_query_plan' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/querying.rb:37:in `find_by_sql' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation.rb:171:in `exec_queries' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation.rb:160:in `to_a' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/explain.rb:33:in `logging_query_plan' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation.rb:159:in `to_a' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:378:in `find_first' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:122:in `first' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:336:in `find_one' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:312:in `find_with_ids' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/relation/finder_methods.rb:107:in `find' 
from /home/aneyer/.rvm/gems/[email protected]/gems/activerecord-3.2.7/lib/active_record/querying.rb:5:in `__send__' 
from /home/aneyer/.rvm/gems/[email protected]/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-adapter(0.0.3)。

这个问题似乎与此类似:

Rails 3: Model.all => NoMethodError: undefined method 'accept' for nil:NilClass

但我想提出有所有的解决方案,并没有一次成功。

编辑: 如果我拿出'activerecord-mysql2-adapter'gem,我会得到以下错误。

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

什么补丁数量是你在哪里? Ruby 1.8.7p248和249与rails不兼容。 – Max 2012-08-09 20:15:09

+0

p370。我正在使用新的RVM和1.8.7安装。 – Aaronneyer 2012-08-09 20:17:10

回答

10

想通了。结果很久以前某人制作的自定义宝石造成了一些错误。去掉那颗宝石就能修好它。

对于那些有类似问题的人,请确保您删除'activerecord-mysql2-adapter'gem。这是造成最初问题的原因。

5

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

相关问题