1

我正在尝试删除最后一个数据库记录,但是当我按下链接时,页面只是刷新并且我什么也没得到:/

这是我的控制器:

  def delete
    @todo_items = Todo.last
    @todo_items.delete
  end

&这是我的看法

<h1>Shared Todo App</h1>
  <p>All your todos here</p>
<% @todo_items.each do |t| %>
<li><%= t.todo_item %>
<% end %>

  <%= link_to 'Delete', todo_item, confirm: 'Are you sure?', method: :delete %>

有任何想法吗?

4

4 回答 4

1

遵循相同的教程时,我遇到了同样的错误

我将控制器更改为:

def destroy
@todo_items = Todo.last
@todo_items.destroy
end

并将我的视图名称更改为destroy.html.erb。

这似乎对我有用。

于 2014-02-15T19:31:39.570 回答
1

首先,您的操作名称应该是destroy,而不是delete。默认情况下,带有method: :deletewill 的链接映射到名为 的操作destroy。有关详细信息,请参阅本指南

其次,您可能希望在destroy操作结束时重定向某个地方。例如redirect_to root_path, 或任何合适的。

于 2012-11-04T18:06:33.477 回答
0

如前所述,您的操作应该称为销毁,但这不是这里的问题。如果页面只是刷新,这意味着它没有调用 DELETE 方法,否则你应该看到一个“找不到动作”错误或者 Rails 应该运行默认的销毁方法。

您的问题可能与javascript有关。确保您已启用它并且在 application.html.erb 页面上您具有以下导入:

<%= javascript_include_tag :all %>

或者至少是 rails.js 文件,它是在您更改默认方法时使 link_to 方法起作用的文件:

<%= javascript_include_tag "rails" %>
于 2012-11-04T20:06:54.653 回答
0

控制器动作应该是:destroy

def destroy
  @todo_items = Todo.last
  @todo_items.delete
end

因为 Rails 有 7 个动作,其中包括:newshoweditindex和.destroyupdate

因此请求将destroy采取行动。所以试试这个,这会奏效。

于 2012-11-04T18:05:40.827 回答