【问题标题】:Rails 3: Model.all => NoMethodError: undefined method 'accept' for nil:NilClassRails 3:Model.all => NoMethodError:nil:NilClass 的未定义方法“接受”
【发布时间】:2012-02-15 15:44:59
【问题描述】:

我正在尝试围绕预先存在的 MySQL 数据库构建 Rails 应用程序。我创建了 rails 项目,正确设置了 database.yml 文件并创建了一个模型,用户,以对应于数据库中的用户表。但是,当我运行 rails 控制台对其进行测试时,我得到的是:

 > User.all
(32.4ms)  SHOW TABLES
(34.9ms)  describe `users`
NoMethodError: undefined method `accept' for nil:NilClass
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `to_sql'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:16:in `select_all'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/querying.rb:38:in `block in find_by_sql'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/explain.rb:40:in `logging_query_plan'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/querying.rb:37:in `find_by_sql'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/relation.rb:170:in `exec_queries'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/relation.rb:159:in `block in to_a'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/explain.rb:33:in `logging_query_plan'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/relation.rb:158:in `to_a'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/relation/finder_methods.rb:159:in `all'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/querying.rb:5:in `all'
from (irb):1
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/console.rb:47:in `start'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands/console.rb:8:in `start'
from /home/richard/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'1.9.3-p0 :002 > ^C

知道为什么会这样吗?据我所知,我遵循 Rails 约定:我创建了一个 User 模型来对应数据库中已经存在的名为 users 的表,其主键是一个名为 id 的整数字段。

【问题讨论】:

  • 你有一些名为visitor的列吗?
  • 因为它是一个变量调用 visitor 在堆栈跟踪中为零。所以可能是问题
  • 请原谅我的无知,但是您在堆栈跟踪中哪里看到变量访问者?
  • 您使用的是哪种数据库(适配器)?你的 database.yml 怎么样?

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

刚刚遇到同样的问题。将其缩小为与 MySQL 相关的问题,因为它仅发生在暂存环境 (MySQL) 而不是开发环境 (sqlite3) 中。通过将mysql2 从版本 0.2.7 升级到 0.3.11 来修复它。

【讨论】:

  • 这对我有用。编辑 Gemfile 以删除版本“bundle update mysql2 并使用rake db:drop 后跟rake --trace db:setup 重新创建数据库。
  • 我在非 Rails 应用程序中使用 0.3.11,但仍然遇到此问题。
  • @BenHamill,我也遇到了 0.3.11 非 Rails 的问题。通过从我的 gemspec 中删除 activerecord-mysql2-adapter 来解决它。
【解决方案2】:

升级到 Rails 3.2.2 后,我在使用 MySQL 时遇到了类似的问题。

这就是我为修复它所做的。

rvm gem install mysql2
In GemFile remove old MySQL gem and add - gem ‘mysql2' 
bundle install
bundle update activerecord-mysql2-adapter
bundle update mysql2

然后重启你的 Rails 服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多