【问题标题】:"Undefined method 'delete' for nil:NilClass" in SinatraSinatra 中的“nil:NilClass 的未定义方法‘删除’”
【发布时间】:2016-09-15 04:03:06
【问题描述】:

我正在 Sinatra 中处理一个项目,但我似乎无法让删除方法工作。我的意图是能够使用模式中的表单删除对象。这是我所拥有的:

routes.rb:

  delete '/songs/:id/delete' do

     @song = Song.where(:id => params[:id]).first

     @song.delete

     redirect to '/songs'

  end

index.erb:

 <form action="/songs/:id/delete" method="post">
        <input type="hidden" name="_method" value="delete">
          <div id="song_id">
            <label>id:</label>
            <input type="text" name="id">
          </div>
          <button type="submit" id="delete">Delete</button>
          <a href="/songs"><div id="back">Back to Songs</div></a>
        </form>

非常感谢您的反馈。 (另外,抱歉缩进并不完美)

【问题讨论】:

  • 在您的控制器中@songnil(因为找不到具有给定id 的歌曲)。在处理之前检查Song.where... 是否真的返回了一些东西(通过.delete)。请参阅 B Sevens 的答案,了解您的 id 不正确的原因。

标签: ruby-on-rails ruby sinatra erb


【解决方案1】:

您必须将 id 注入表单。不是:id

 # example
 <form action="/songs/1234/delete" method="post">

此外,您还可以看到 puts params 发生了什么。

【讨论】:

  • 知道了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多