form_for转到错误的URL

fat*_*rog 2 forms routes ruby-on-rails

我在订单查看页面上,我想更新该订单上的订单项:

我有我的路线:

  resources :order_line_details do
    member do 
      put  :update_barcode
    end
  end
Run Code Online (Sandbox Code Playgroud)

然后我的form_for:

<%= form_for update_barcode_order_line_detail_path(@order_line_detail) do |f| %>
<%= f.text_field :hds_barcode  %>
<%= f.submit 'Submit' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当我提交时,它再次进入订单:

No route matches "/orders/20888"
Run Code Online (Sandbox Code Playgroud)

耙路线:(订单和订单详情)

orders GET      /orders(.:format)                                              {:action=>"index", :controller=>"orders"}
                                  orders POST     /orders(.:format)                                              {:action=>"create", :controller=>"orders"}
                               new_order GET      /orders/new(.:format)                                          {:action=>"new", :controller=>"orders"}
                              edit_order GET      /orders/:id/edit(.:format)                                     {:action=>"edit", :controller=>"orders"}
                                   order GET      /orders/:id(.:format)                                          {:action=>"show", :controller=>"orders"}
                                   order PUT      /orders/:id(.:format)                                          {:action=>"update", :controller=>"orders"}
                                   order DELETE   /orders/:id(.:format)                                          {:action=>"destroy", :controller=>"orders"}


   update_barcode_order_line_detail PUT      /order_line_details/:id/update_barcode(.:format)               {:action=>"update_barcode", :controller=>"order_line_details"}
                      order_line_details GET      /order_line_details(.:format)                                  {:action=>"index", :controller=>"order_line_details"}
                      order_line_details POST     /order_line_details(.:format)                                  {:action=>"create", :controller=>"order_line_details"}
                   new_order_line_detail GET      /order_line_details/new(.:format)                              {:action=>"new", :controller=>"order_line_details"}
                  edit_order_line_detail GET      /order_line_details/:id/edit(.:format)                         {:action=>"edit", :controller=>"order_line_details"}
                       order_line_detail GET      /order_line_details/:id(.:format)                              {:action=>"show", :controller=>"order_line_details"}
                       order_line_detail PUT      /order_line_details/:id(.:format)                              {:action=>"update", :controller=>"order_line_details"}
                       order_line_detail DELETE   /order_line_details/:id(.:format)                              {:action=>"destroy", :controller=>"order_line_details"}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Dan*_*nne 8

form_for方法的第一个参数应该是表单所针对的对象.然后,您可以使用:url参数手动更改默认URL.尝试这样做:

<%= form_for @order_line_detail, :url => update_barcode_order_line_detail_path(@order_line_detail) do |f| %>
  <%= f.text_field :hds_barcode  %>
  <%= f.submit 'Submit' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)