ruby-on-rails - 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>
在更新方法中,假设我迟早让它工作,我应该插入一个逻辑来从订单本身中删除产品。目前,如果我进入 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
如您所见,我添加了 :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'
现在它起作用了,但我仍然怀疑它为什么起作用:/
解决方案
简要说明:更改action: 'remove'
为action: 'destroy'
。
大多数浏览器只支持GET、POST、OPTION ,但所有其他方法都由 Rails 使用隐藏的表单字段_method模拟。
当你说method: 'patch'
这意味着request.method
在你的控制器的方法中它会是patch
但是如果你想在控制器中指定你应该使用的确切方法action
希望这会有所帮助:)
推荐阅读
- seedstack - SeedStack,在假装客户端期间进行rest api调用时的代理配置?
- python - wordList - 刽子手游戏
- sql - 查找与所有指定组中的任何值匹配的行
- sql - SQL datetime 对象中时区的正则表达式
- data-warehouse - 事实表和维度表
- ionic3 - Ion-img 响应大小
- java - WSO2 IS 5.7 在有关 DefaultRealm 的生产部署中失败
- php - Orderby 在 Wordpress/SQL 中默认为 DESC
- r - R编程问题。翻转加权硬币
- firemonkey - 清除 ListView (firemonkey)