不幸的是,这是a bug.你必须像你提到的那样设置url.
= form_for @order, :url => order_path do |f|
请注意,这将正确路由到create
或update
,具体取决于@order
是否被持久化.
Update
现在还有另一个 Select .您可以将其添加到路由配置中:
resolve("Order") { [:order] }
然后,当polymorphic_url
方法被赋予类名为"Order"的对象时,它将使用[:order]
作为url组件,而不是像jskol's answer中所述调用model_name.route_key
.
它有一个限制,即不能在作用域或名称空间中使用.您可以在routes配置的顶层路由带名称空间的模型:
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