我希望用户只使用一个连接到用户会话的订单.所以我为订单设置了单数资源

路由.rb:

resource :order

视图/订单/新建.html.雇员再培训局:

<%= form_for @order do |f| %>
   ...
<% end %>

但当我打开"新订单"页面时,我发现一个错误:

undefined method `orders_path`

我知道,我可以在form_for中设置:url => order_path,但解决这次碰撞的真正方法是什么?

推荐答案

不幸的是,这是a bug.你必须像你提到的那样设置url.

= form_for @order, :url => order_path do |f|

请注意,这将正确路由到createupdate,具体取决于@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

Ruby-on-rails相关问答推荐

有什么办法能把这写清楚吗?

如何将Form_With用于多个没有控制器的型号

Rails/Rspec中的测试文章创建

Rails HMAC - 使用应用程序机密作为加密密钥

rails turbo frame 显然在更新,但浏览器窗口保持不变

Ruby on Rails/Activerecord 排序自引用查询?

如何在 Arel 中重用单个绑定变量?

如何从设计中删除/禁用注册

Rails 4.1 Mailer 预览和设计自定义邮箱

Rails 上的 build 和 new 有什么区别?

如果 URL 不存在,请将 http(s) 添加到 URL?

Rails 3 中图像路径的完整 url

具有条件的列的计数器缓存?

如何在不删除项目本身的情况下删除单个 HABTM 关联项目?

Rails:立即渲染并退出

加载常量时自动加载常量时检测到循环依赖

Test::Unit Rails - 如何断言一个数字大于另一个?

Rails:弃用警告:您没有设置 config.secret_key_base

Rails:在 link_to 中保留 GET 查询字符串参数

我如何为 Rails3/Bundler 供应 gems