为什么我无法删除数据库中的元素?

时间:2013-06-17 21:55:38

标签: ruby-on-rails ruby ruby-on-rails-3 debugging

The List 这是用户创建的列表,并且跟踪控制器中的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>&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.

2 个答案:

答案 0 :(得分:2)

您的方法应该是delete,而不是destroy。您感兴趣的HTTP动词包括GETPOSTPUTDELETE; 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>&nbsp;&nbsp;<%= track.youtube_url %></li><i class="icon-remove-circle remove_pos"><%=link_to 'delete', :controller => "tracks", :method => :delete, :id => track.id %></i>