【发布时间】:2011-10-09 11:12:43
【问题描述】:
我有一个 Contact 模型,我想通过 URL 中的 slug 访问它,所以我像这样覆盖了 to_param:
def to_param
"#{self.id}-#{full_name.parameterize}"
end
我正在使用标准、宁静的资源:
resources :contact
这按预期工作。路径助手返回 slugified URL。并且 URL 已正确路由到控制器。到目前为止,一切顺利。
问题在于,虽然 slug 路由正确,但更新路由规范以反映更改会导致规范失败。
例如此规范失败:
get("/contacts/1-john-smith").should route_to("contacts#show", :id => "1")
原版通过:
get("/contacts/1").should route_to("contacts#show", :id => "1")
这里有些东西不完全加起来。当 URL 在浏览器中正确解析时,规范为什么会失败?为什么更改to_param 不会破坏原始 URL?
更重要的是,如何更改路由声明以使规范通过?我可以使用resources 声明来做到这一点吗?还是我必须手动定义这些路线?
【问题讨论】:
标签: ruby-on-rails routing rspec slug