残念ながら、これはバグです。あなたが言及したようにURLを設定する必要があります。
= form_for @order, :url => order_path do |f|
これは、永続化されているかどうかに応じて、create
またはに適切にルーティングされることに注意してください。update
@order
アップデート
もう一つの選択肢があります。これをルート構成に追加できます。
resolve("Order") { [:order] }
次に、polymorphic_url
クラス名が「Order」のオブジェクトがメソッドに与えられると、 jskol の answerで説明されているよう[:order]
に呼び出す代わりに、url コンポーネントとして使用されます。model_name.route_key
これには、スコープまたは名前空間内で使用できないという制限があります。ルート構成の最上位で名前空間モデルをルーティングできます。
resolve('Shop::Order') { [:shop, :order] }
ただし、余分なコンポーネントを含むルートには影響しないため、
url_for(@order) # resolves to shop_order_url(@order)
url_for([:admin, @order]) # resolves to admin_shop_orders_url(@order)
# note plural 'orders' ↑
# also, 'shop' is from module name, not `resolve` in the second case