我试图添加一个删除操作到我的应用程序,我得到一个奇怪的错误,我有麻烦跟踪。看起来创建操作正在被触发,即使我已经将按钮分配给删除操作。当我点击删除按钮时,基于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