我想向控制器添加另一個動作。所以我在我的控制器中定義了這個動作,添加了一個按鈕來激活它並將它添加到routes.rb中。路徑助手和[action,controller]之間的區別button_to
orders_controller.rb
...
def shipped
...
end
...
的routes.rb
resources :orders do
put :shipped, on: :member
end
...
視圖/命令/ edit.html.rb
...
<%= button_to 'Ship', order_shipped_path, method: :put %>
...
然而,當我試圖查看/命令/ 1 /編輯我得到這個錯誤:
No route matches {:action=>"shipped", :controller=>"orders"}
條
耙路線給了我下面的輸出:
shipped_order PUT /orders/:id/shipped(.:format) orders#shipped
orders GET /orders(.:format) orders#index
POST /orders(.:format) orders#create
new_order GET /orders/new(.:format) orders#new
edit_order GET /orders/:id/edit(.:format) orders#edit
order GET /orders/:id(.:format) orders#show
PUT /orders/:id(.:format) orders#update
DELETE /orders/:id(.:format) orders#destroy
...
搜索,試圖找到路徑的助手和路線信息後,我發現下面的替代語法,它的工作:
<%= button_to 'Ship', [:shipped, @order], method: :put %>
所以問題是,爲什麼替代語法起作用?幕後發生了什麼?另外,這是向路由添加操作的正確方式嗎?
如果是相關的,我使用Ruby on Rails的3.2
感謝
還有第三個答案,但無論誰把它刪除。這也是正確的,我可以通過shipped_order_path得到正確的結果。 –