2016-09-15 3 views
1

Я работаю над проектом в Sinatra, и я не могу заставить метод удаления работать. Мое намерение состоит в том, чтобы удалить объект с помощью формы в модальном режиме. Вот что у меня есть:«Неопределенный метод« удалить »для nil: NilClass» в 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> 

Обратная связь приветствуется. (Кроме того, извините, углубление не является совершенным)

+0

В вашем контроллере '@ song' является' nil' (потому что песня с данным 'id' не найдена). Проверьте, действительно ли 'Song.where ...' возвращает что-то перед его работой (через' .delete'). См. Ответы B Sevens, почему ваш идентификатор неверен. – Felix

ответ

1

Вам необходимо ввести идентификатор в форму. Не :id.

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

Кроме того, вы можете увидеть, что происходит с puts params.

+0

Получил! Благодаря! – neezy

 Смежные вопросы

  • Нет связанных вопросов^_^