Rails 4.0中创建delete操作的link_to存在问题

8
这是我在Rails中的第一个项目,目标是创建一个表格来存储游戏数据。我可以展示赢家得分、输家得分等数据。但是,我遇到了一个问题,就是包含每个游戏删除链接的表格列。
以下是我在游戏控制器中删除方法的代码:
def delete
  @game = Game.find(params[:game])
  @game.destroy()
  redirect_to :action => 'index'
end

我的表格代码片段,包括link_to命令的行:
    <% @games_items.each do |t| %>
     <tr>
        <td><%= t.winner.name %></td>
        <td><%= t.loser.name %></td>
        <td><%= t.challenger.name %></td>
        <td><%= t.winner_score %></td>
        <td><%= t.loser_score %></td>
        <td><%= link_to 'Delete', delete_game_path(id: t.id)%></td>
     </tr>
    <% end %>

在路由文件中,我调用了以下内容:
resources :games

据我所知,这有助于生成基础路由。有人能帮我弄清楚为什么我的link_to无法工作吗?
4个回答

17
如果你使用(建议使用)resources: a)删除记录的操作名称应被命名为destroy。 b)通过:id参数搜索游戏。
def destroy
  @game = Game.find(params[:id])
  @game.destroy
  redirect_to :action => 'index'
end

c)您的链接应该是:

<%= link_to 'Delete', t, method: :delete %>

由于路径与show操作相同,唯一变化的是HTTP方法。


我应该在哪里查看我的操作应该被命名为什么?这是否包含在rake routes方法中? - Michael Liu
@MichaelLiu 是的,rake routes 任务的输出包含了适当的动作名称。 - Marek Lipka
@MarekLipka 我遇到了完全相同的问题,但我无法让:delete方法起作用。无论我做什么,它都会导致一个get请求。有任何想法吗?<%= link_to("删除!", {:controller=>'projects', :action=>'destroy', :id=>project.hashed_id}, {method: :delete} ) %> - emersonthis
@Emerson,你的JavaScript可能无法正常工作。请检查浏览器的控制台以查看可能的JS错误。 - Marek Lipka

6

删除调用的格式为:

<%= link_to 'Delete', game_path(t.id), :method => :delete %>

使用rake routes命令可以了解可用路由信息,包括生成的路由助手和处理请求的控制器/操作。

非常感谢,这正是我想要的。 :) - Jigar Bhatt

5

我在Rails 4.2.1上遇到了类似的问题,即使在link_to中使用 :method => :delete,它仍然会路由到show方法。

但是,使用以下的button_to方法就可以解决问题!

<%= button_to "delete", article_path(:id => article.id), :method => :delete %>

我曾遇到同样的问题,link_tomethod: :delete 无法工作,但通过将 jquery_ujs 添加到我的 application.js 中解决了这个问题。https://dev59.com/lWMl5IYBdhLWcg3wwZIq#23331608 - Ryan Hertz

0
尝试在您的布局中使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>,并在<%= javascript_include_tag "application" %>之前添加它,同时删除


//= require jquery

在您的application.js文件中加入以下行。 这就是我的情况。不知道为什么原始的rails jquery.js文件不能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接