コントローラーに別のアクションを追加したかったのです。そこで、コントローラーでアクションを定義し、それをアクティブにするボタンを追加して、routes.rb に追加しました。
orders_controller.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 を使用しています
ありがとう