我想向控制器添加另一个动作。所以我在我的控制器中定义了动作,添加了一个按钮来激活它并将它添加到 routes.rb 中。
订单控制器.rb
...
def shipped
...
end
...
路线.rb
resources :orders do
put :shipped, on: :member
end
...
查看/订单/edit.html.rb
...
<%= button_to 'Ship', order_shipped_path, method: :put %>
...
但是,当我尝试查看 /orders/1/edit 时,出现此错误:
No route matches {:action=>"shipped", :controller=>"orders"}
rake routes 给了我以下输出:
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
谢谢