【发布时间】:2015-05-25 15:18:15
【问题描述】:
根据http://edgeguides.rubyonrails.org/routing.html#overriding-named-route-parameters,我正在定义一个带有自定义命名路由参数的路由,而不是:id,以创建友好的URL。 routes.rb 看起来像:
resources :spaces, param: :name
运行 rake routes 确实给出了带有动态段的正确路径:
space GET /spaces/:name(.:format) spaces#show
但使用space_path 仍会尝试检索 ID:
irb(main):009:0> app.space_path space
=> "/spaces/1"
是否应该给出“/spaces/foo”(假设带有id=1 的空间有name=foo)
我可以明确地这样做:
irb(main):009:0> app.space_path space.name
=> "/spaces/foo"
但随后我失去了动态路径的全部意义,我的所有观点都变得更加脆弱。动态路径是否应该无法识别要检索的属性?
我知道我可以在模型中覆盖to_params,但同样,这不是让模型变脆吗?动态路径不应该识别动态段的名称并从模型中检索正确的属性吗?
【问题讨论】:
标签: ruby-on-rails rails-routing