2013-06-17 3 views
0

The List Это список, который был сделан пользователем, а метод destroy в контроллере Tracks (каждый трек относится к каждому элементу в списке) удаляет их после нажатия ссылки. Однако это происходит, и список остается постоянным.Почему я не могу удалить элементы из своей базы данных?

Контроллер:

class TracksController < ApplicationController 
def index 
    @track = Track.new 
    @tracks = Track.all 
end 

def create 
    @track = Track.new(params[:track]) 
    if @track.save 
     redirect_to :action=>"index" 
    else 
    @tracks = Track.all 
    render :action=>"index" 
    end 
end 

def destroy 
    @track = Track.find(params[:id]) 
    @track.destroy 
    redirect_to(tracks_url) 
end 
end 

Шаблон (для обозначения линии, которая создает ссылку удалить и определяет его поведение)

<h1>Playlist</h1> 

<%= form_for @track,:url=>{:action=>'create'} do |f| %> 
    <%= f.error_messages %> 
    <p> 
     <%= f.text_field :youtube_url, :required=>true %> 
     <%= f.submit 'Add' %> 
    </p> 
<% end %> 

<hr /> 

<% if Track.first == nil %> 
<p>Database is empty!</p> 
<%else%> 
<% @tracks.each do |track| %> 
    <ul class="list_container"> 
    <li class="list_elements"><i class="bullet icon-asterisk"></i>&nbsp;&nbsp;<%= track.youtube_url %></li><i class="icon-remove-circle remove_pos"><%=link_to 'delete', :controller=>"tracks", :method=>:delete,:id=>track.id %></i> 
    </ul> 
<% end %> 
<% end %> 

And finally the routes.rb that seems to be intact.

ответ

1

Предполагая, что вы используете

resources :tracks 

в файле routes.rb, то действие контроллера вы хотите уничтожить, а не удалять. Поэтому измените имя этого метода.

def destroy 
    @track = Track.find(params[:id]) 
    @track.destroy 
    redirect_to(tracks_url) 
end 

Тогда в вашей точки зрения,: параметр метода является глагол HTTP DELETE, так что бит становится

<li class="list_elements"><i class="bullet icon-asterisk"></i>&nbsp;&nbsp;<%= track.youtube_url %></li><i class="icon-remove-circle remove_pos"><%=link_to 'delete', :controller => "tracks", :method => :delete, :id => track.id %></i> 
+0

Я пробовал это, опять же, список остается постоянным ... – Louis93

2

Ваш метод должен быть delete, не destroy. HTTP-глаголы, которые вас интересуют: GET, POST, PUT и DELETE; Rails отобразит DELETE запросов (через находчивые маршруты) до destroy действий, но вы не укажете destroy в качестве глагола.

+0

К сожалению, что было что-то я изменил только, чтобы увидеть, если это была проблема, спасибо за это все же. Изменение метода для удаления не приводит к тому, что программа также реагирует по-другому. – Louis93

+0

Изменение кода, чтобы показать, как оно должно выглядеть, чтобы вы могли уточнить – Louis93