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

时间:2014-06-17 15:08:08

标签: ruby-on-rails ruby-on-rails-4

我正在尝试向我的应用添加删除操作,而且我遇到了一个奇怪的错误,我无法跟踪。即使我已将按钮分配给删除操作,似乎也会触发创建操作。当我点击删除按钮时,基于URL,似乎它可能正在使用GET,我很确定它不正确。

非常感谢任何帮助!

这是我在索引视图中点击删除按钮时获得的error

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>

2 个答案:

答案 0 :(得分:4)

Rails会在您的控制器中查找destroy未删除。

def delete更改为def destroy

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

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

同样在您的创建中,您将获取所有Dogs然后重定向哪个是浪费,请删除@dogs = Dog.all查询。

@dogs = Dog.all
redirect_to dogs_path

答案 1 :(得分:0)

button_to必须传入像这样的参数

button_to 'Delete', dog, method: :delete