2016-09-15 11 views
1

私はSinatraのプロジェクトで作業していますが、削除メソッドが機能しないようです。私の目的は、モーダルでフォームを使用してオブジェクトを削除できるようにすることです。ここで私が持っているものです。"Sinatraの定義されていないメソッド 'delete' for nil:NilClass"

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> 

フィードバックが理解されます。 (また、申し訳ありませんインデントは完璧ではありません)

+0

あなたのコントローラでは、 '@ song'は' nil'です(指定された 'id'を持つ曲が見つかりませんでした)。 'Song.where ...'が実際に何かを返すかどうかをチェックする( '.delete'を介して)。あなたのIDが正しくない理由については、B Sevensの答えを参照してください。 – Felix

答えて

1

フォームにidを注入する必要があります。なし:id

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

さらに、puts paramsで何が起こっているかを見ることができます。

+0

ありがとう! – neezy

関連する問題