2012-02-15 25 views
5

既存のMySQLデータベースの周りにRailsアプリケーションを構築しようとしています。私はレールプロジェクトを作成し、database.ymlファイルを適切にセットアップし、データベース内のユーザーテーブルに対応する1つのモデルUserを作成しました。しかし、それをテストするためにレールコンソールを実行すると、これは私が得るものです:Rails 3:Model.all => NoMethodError:未定義メソッド 'accept' for nil:NilClass

> 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 

これはどういう考えですか?私は、私が知っている限りレールの規則に従っています。私はUserモデルを、dbにすでにあるユーザーと呼ばれるテーブルに対応させました。主キーはIDという整数フィールドです。

+0

'visitor'という名前の列がありますか? – shingara

+0

@shingaraいいえ、私は、なぜですか? –

+0

これは、変数 'visitor'がstacktraceにnilであるためです。だから問題がある可能性があります – shingara

答えて

4

ちょうど同じ問題がありました。開発環境(MySQL)でのみ発生していて、開発段階(sqlite3)では発生していないので、MySQL関連の問題に絞り込んだ。 mysql2をバージョン0.2.7から0.3.11にアップグレードすることで修正されました。

+0

これは私のために働いた。 Gemfileを編集して '<0.3'のバージョンを削除しました。その後、 'bundle update mysql2'と呼ばれ、' rake db:drop'と 'rake --trace db:setup'の後にデータベースを作り直しました。 – peterept

+0

私は非Railsアプリで0.3.11を使用していますが、まだこの問題があります。 –

+1

@BenHamill、私は0.3.11の非Railsでもこの問題を抱えています。私のgemspecからactiverecord-mysql2-adapterを削除して解決しました。 –

4

私は、レール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 

次に、レールサーバーを再起動します。

関連する問題