Button_to指向补丁/更新方法不起作用



我想做的是一个指向控制器内部补丁(更新?(的button_to,但它不起作用。这是我的代码。

<div>
<%= product.picture? ? image_tag(product.picture_url, :alt => product.name) : image_tag("https://via.placeholder.com/250x250") %>
Product: <%= product.name %><br />
Description: <%= product.description %><br />
Price: <%= humanized_money_with_symbol(product.price) %><br />
Venduto da: <%= product.user.email %><br />
<%= button_to "Remove", {controller: "orders", action: 'remove', :id => product.id}, :method=>:patch %>
</div>

在 Update 方法中,假设我迟早会让它工作,我应该插入一个逻辑来从订单本身中删除产品。目前,如果我转到index.html.erb内的查看页面,其中包含添加的相关产品中要支付的订单列表。在我的情况下,订单是一种购物车。我收到此错误:

没有路由匹配 {:action=>"remove", :controller=>"orders", :id=>456}

这些是我的路线:

Rails.application.routes.draw do
root to: 'pages#home'
devise_for :users
resources :products
resources :orders, only: [:show, :create, :index, :destroy, :patch]
require "sidekiq/web"
authenticate :user, lambda { |u| u.admin } do
mount Sidekiq::Web => '/sidekiq'
end
end

如您所见,我添加了:p atch路由,但它仍然不起作用。 我认为问题首先出在我的路线中...... 我现在有一些问题。 1:如果我想创建一个link_to或一个button_to帮助程序来执行与常见crud操作不同的方法,我是否必须创建到该自定义方法的路由?你能举个例子吗? 2:就我而言,我是在做帖子、获取请求还是补丁?(我正在尝试使用 Patch,因为我正在更新我的订单,所以我想我应该插入逻辑以删除订单中的产品( Rails 的文档很棒,但关于路由,我现在很困惑,一旦我想从模式中做一些事情,我就会陷入几天试图让它工作。 3:有人可以将我链接到一个带有示例的好指南来理解路由吗?谢谢。

更新我找到了解决方案:

<%= button_to("Remove", {:controller => "orders", :action => "update", :id => product.id}, :method => :patch) %>

我在路线中添加了以下内容:

patch '/orders', action: :update, controller: 'orders'

现在它可以工作了,但我仍然怀疑它为什么有效:/

简言之:将action: 'remove'更改为action: 'destroy'

大多数浏览器仅支持GETPOST、OPTION,但所有其他方法都由 Rails 使用隐藏表单字段_method进行模拟。

当您说method: 'patch'时,这意味着在控制器的方法中request.method它将是patch但是如果要在控制器中指定确切的方法,则应使用action

希望这对:)有所帮助

最新更新