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

时间:2018-10-11 18:50:25

标签: ruby-on-rails ruby

我想做的是将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'

现在它可以工作了,但是我仍然对为什么它起作用感到怀疑:/

1 个答案:

答案 0 :(得分:0)

简短地:将action: 'remove'更改为action: 'destroy'

大多数浏览器仅支持 GET POST OPTION ,但所有其他方法均由Rails使用隐藏的表单域 _method进行模拟

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

的控制器

希望会有所帮助:)