这是用户创建的列表,并且跟踪控制器中的destroy方法(每个轨道引用列表中的每个元素)在单击链接后删除它们。但是,这确实发生了,列表保持不变。
控制器:
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> <%= 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 %>
答案 0 :(得分:2)
您的方法应该是delete
,而不是destroy
。您感兴趣的HTTP动词包括GET
,POST
,PUT
和DELETE
; Rails会将DELETE
个请求(通过资源丰富的路由)映射到destroy
个操作,但是您没有将destroy
指定为动词。
答案 1 :(得分:1)
假设您正在使用
resources :tracks
在您的routes.rb文件中,然后您想要的控制器操作是销毁,而不是删除。所以在那里改变那个方法名。
def destroy
@track = Track.find(params[:id])
@track.destroy
redirect_to(tracks_url)
end
然后在您的视图中,:method参数是HTTP谓词DELETE,因此该位变为
<li class="list_elements"><i class="bullet icon-asterisk"></i> <%= track.youtube_url %></li><i class="icon-remove-circle remove_pos"><%=link_to 'delete', :controller => "tracks", :method => :delete, :id => track.id %></i>