NoMethodError:未定义的方法`delete' for nil:尝试通过控制台从数据库中删除对象时为NilClass

时间:2014-06-13 00:45:25

标签: ruby-on-rails ruby methods ruby-on-rails-4

我尝试创建一个简单的Rails项目。我有这个错误:NoMethodError: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

我将数据添加到我的数据库中。我将一个对象实例化为一个变量。我正在尝试删除我在数据库中的特定电影。我试图使用destroy和delete方法,但错误显示。

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>'

1 个答案:

答案 0 :(得分:2)

您收到该错误,因为该查询没有返回任何记录:

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

您想在调用destroy之前确认您的记录已加载。

还要记下通话之间的控制台输出。第一个电话: puss_boots = Movie.find_by(title: 'Puss and boots') 在您的Movie表上进行SELECT查询并返回nil,这意味着没有找到该查询的记录。