2014-06-13 2 views
0

l 간단한 Rails 프로젝트를 만들려고합니다. 나는이 오류가있다 : NoMethodError : 정의되지 않은 메소드`delete 'for nil : NilClassNoMethodError : nil에 대해 정의되지 않은 메소드`delete ': 콘솔을 통해 데이터베이스에서 객체를 삭제하려고 할 때 NilClass

나는 수동으로 입력하는 영화로 데이터베이스를 만들고있다.

class CreateMovies < ActiveRecord::Migration 
    def change 
    create_table :movies do |t| 
     t.string :title 
     t.string :rating 
     t.decimal :total_gross 
     t.date :release_date 

     t.timestamps 
    end 
    end 
end 

내가 내 DB에 데이터를 추가 :

나는 다음과 같은 이주했다. 개체를 변수로 인스턴스화합니다. 내 데이터베이스에있는 특정 영화를 삭제하려고합니다. 파괴 및 삭제 방법을 사용하려고했지만 오류가 표시됩니다. 아무 기록도 그 쿼리에 대한 반환이 있었기 때문에

2.0.0-p247 :025 > puss_boots = Movie.find_by(title: 'Puss and boots') 
    Movie Load (0.2ms) SELECT "movies".* FROM "movies" WHERE "movies"."title" = 'Puss and boots' LIMIT 1 
=> nil 
2.0.0-p247 :026 > puss_boots.destroy 
NoMethodError: undefined method `destroy' for nil:NilClass 
    from (irb):26 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start' 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start' 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 
2.0.0-p247 :027 > puss_boots.delete 
NoMethodError: undefined method `delete' for nil:NilClass 
    from (irb):27 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start' 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start' 
    from /Users/jona/.rvm/gems/ruby-2.0.0-p247/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>' 
    from bin/rails:4:in `require' 
    from bin/rails:4:in `<main>' 
+2

일치하는 영화를 찾을 수 없습니다. 줄 025에 대한 응답을 보라 : 그것은'nil'이다. – colinm

답변

2

당신은 그 오류를 받고 :

Movie.find_by(title: 'Puss and boots')

당신은 당신의 기록이 파괴 호출하기 전에로드되었는지 확인합니다.

또한 통화 사이의 콘솔 출력을 기록해 둡니다. 첫 번째 호출은 puss_boots = Movie.find_by(title: 'Puss and boots') 은 Movie 테이블에 대해 SELECT 쿼리를 만들고 nil을 반환합니다. 이는 단순히 해당 쿼리에 대해 레코드가 발견되지 않았 음을 의미합니다.

+0

감사합니다. 어리석은 짓일 줄 알았어. (신참 실수) –

+1

나는 자신을 신인이라고 여깁니다. 그래서 나는 공감할 수 있습니다. 신참자의 견해로 볼 때,이 훌륭한 언어를 배우면서 깨달은 가장 가치있는 테이크 아웃은 콘솔이 출력하는 것을 정확히 주목하는 것입니다. 그것은 횡설수설처럼 보일지도 모르지만 실제로 실제로 말하고 있습니다 ... 최고의 소원! – jakenberg

관련 문제