【问题标题】:Issue in rails 4.0 with creating a link_to for a delete actionrails 4.0 中的问题,为删除操作创建 link_to
【发布时间】:2013-07-08 14:28:15
【问题描述】:

这是我在 Rails 中的第一个项目,它是创建一个存储游戏数据的表。我可以显示表格中有关获胜者得分、失败者得分等的数据。但是,我的表格列存在问题,其中包含每场比赛的删除链接。

这是我在游戏控制器中删除方法的代码:

def delete
  @game = Game.find(params[:game])
  @game.destroy()
  redirect_to :action => 'index'
end

我的表格代码的 sn-p,其中包括 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 不起作用?

【问题讨论】:

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


    【解决方案1】:

    如果您使用(建议)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 方法中吗?
    • @MichaelLiu 是的,rake routes 任务的输出包含适当的操作名称。
    • @MarekLipka 我遇到了完全相同的问题,但我无法使用 :delete 方法。无论我做什么,都会产生一个get 请求。任何想法为什么? ` 'projects', :action=>'destroy', :id=>project.hashed_id}, {method: :delete} ) %> `
    • @Emerson 您的 JavaScript 可能无法正常工作。检查浏览器的控制台是否有可能的 JS 错误。
    【解决方案2】:

    删除调用的格式为:

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

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

    【讨论】:

    • 非常感谢,这实际上是我想要的。 :)
    【解决方案3】:

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

    但是使用下面的 button_to 方法可以!

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

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

    【讨论】:

    • 我遇到了同样的问题,link_to 不能与 method: :delete 一起工作,但通过将 jquery_ujs 添加到我的 application.js stackoverflow.com/a/23331608/4249632 来解决它
    【解决方案4】:

    在你的布局中尝试在&lt;%= javascript_include_tag "application" %&gt;之前使用&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"&gt;&lt;/script&gt;,并删除

    //= require jquery
    

    您的 application.js 中的行。 我就是这种情况。不知道为什么它不适用于原始 rails jquery.js 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多