删除操作在Rails中不起作用-参数丢失



我试图添加一个删除操作到我的应用程序,我得到一个奇怪的错误,我有麻烦跟踪。看起来创建操作正在被触发,即使我已经将按钮分配给删除操作。当我点击删除按钮时,基于URL,它似乎可能使用GET,我很确定这是不正确的。

任何帮助都非常感谢!

这是我得到的错误,当我点击一个删除按钮在索引视图

class DogsController < ApplicationController
def create
    Dog.create(dog_params)
    @dogs = Dog.all
    redirect_to dogs_path
end
def new
    @dog = Dog.new
end
def edit
end
def delete
    @dog = Dog.find params[:id]
    @dog.destroy
    redirect_to dogs_path
end 
def show
    @dog = Dog.find params[:id]
end
def index
    @dogs = Dog.all
end
private
    def dog_params
        params.require(:dog).permit(:name, :breed)
    end
end

索引视图的代码如下:

<h1>List of Dogs</h1>
<table>
<thead>
    <tr>
        <td>Name</td>
        <td>Breed</td>
        <td>Details</td>
    </tr>
</thead>
<% @dogs.each do |d| %>
    <tr>
        <td><%= d.name %></td>
        <td><%= d.breed %></td>
        <td><%= d.id %></td>
        <td><%= link_to 'Details', dog_path(d.id) %></td>
        <td><%= link_to 'Edit', edit_dog_path(d.id) %></td>
        <td><%= button_to 'Delete', :method => :delete %></td>
    </tr>
<% end %>
</table>

Rails将在您的控制器中查找destroy而不是删除。

def delete改为def destroy

Aha还注意到您没有指定要删除的内容:

<%= button_to 'Delete', d, :method => :delete %>

同样在你的创建中,你得到所有的狗,然后重定向,这是一种浪费,删除@dogs = Dog.all查询。

@dogs = Dog.all
redirect_to dogs_path

button_to必须传入这样一个参数

button_to 'Delete', dog, method: :delete

最新更新