在rails 4.0中发出问题,为删除操作创建link_to

时间:2013-07-10 15:12:45

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

这是我在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 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:6)

删除调用的格式为:

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

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

答案 2 :(得分:5)

我在rails 4.2.1上有类似的问题,即使是:method =&gt; :删除link_to它仍然路由到show方法。

但是使用如下的button_to方法有效!

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

button_to在按钮周围创建一个表单然后发布到delete方法,方法是添加一个名为_method的隐藏字段,其值为delete rails使用它来路由到控制器中的destroy方法。 / p>

答案 3 :(得分: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文件。