2012-02-15 3 views
5

기존 MySQL 데이터베이스 주위에 Rails 응용 프로그램을 빌드하려고합니다. 레일즈 프로젝트를 만들었고 database.yml 파일을 적절하게 설정하고 DB의 사용자 테이블에 해당하는 하나의 모델 User를 만들었습니다.레일 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 

어떤 생각 이유는 다음과 같을 수 있습니다 나는 그러나 그것을 테스트 할 수있는 레일 콘솔을 실행하는 경우, 이것은 내가 무엇을 얻을? 나는 내가 알고있는 한 레일 협약을 따르고있다 : 사용자 모델을 이미 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의 non-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 

그러면 레일즈 서버를 다시 시작하십시오.

관련 문제