我想做的是将button_指向控制器内的补丁程序(更新?),但是它不起作用。这是我的代码。
<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>
在更新方法中,假设我使它早晚起作用,我应该插入逻辑以从订单本身中删除产品。目前,如果我进入index.html.erb内的查看页面,其中包含要添加的相关产品内要付款的订单列表。就我而言,订单是一种购物车。我收到此错误:
没有路线匹配{:action =>“删除”,:controller =>“订单”,: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
如您所见,我添加了:patch路由,但仍然无法正常工作。 我认为问题首先在于我的路线... 我现在有一些问题。 1:如果我想创建一个link_to或button_to助手来执行不同于普通Crud操作的方法,我是否需要为该自定义方法创建路由?你能举个例子吗? 2:就我而言,我是在发布帖子,获取请求还是打补丁? (我正在尝试修补程序,因为我正在更新订单,所以我猜应该在哪里插入逻辑以删除订单内的产品)rails的文档很好,但是关于布线,我很困惑此刻,我想从架构中做点什么来,我就花了很多时间试图使其工作。 3:有人可以将我链接到带有示例的好的指南,以了解路由吗?谢谢。
更新我找到了解决方法:
<%= button_to("Remove", {:controller => "orders", :action => "update", :id => product.id}, :method => :patch) %>
我在这条路线中添加了此内容:
patch '/orders', action: :update, controller: 'orders'
现在它可以工作了,但是我仍然对为什么它起作用感到怀疑:/
答案 0 :(得分:0)
简短地:将action: 'remove'
更改为action: 'destroy'
。
大多数浏览器仅支持 GET , POST , OPTION ,但所有其他方法均由Rails使用隐藏的表单域 _method进行模拟。
当您说出method: 'patch'
时,意味着在控制器方法的request.method
中它将为patch
,但如果要在其中指定确切的方法您应该使用action
希望会有所帮助:)