【发布时间】:2012-04-07 11:59:03
【问题描述】:
我正在使用 Rails 3,在设置 slug 后,我发现 posts/new 不再有效。
posts/:id、posts/:id/edit 和所有其他 CRUD 操作都有效。
但是/posts/new 给了我一个路由错误
没有路线匹配 {:action=>"show", :controller=>"posts"}
现在由于某种原因posts/new 正在路由到posts#show。在我的路线中,它只是
resources :posts
我的理论是,由于 /posts/:slug 现在匹配数字 id 以外的东西,所以 show 动词被路由到第一个。但是它没有任何意义,因为posts/grr 一个不存在的条目会给出与posts/new 不同的错误,而posts/first 的所有相关路径也都可以正常工作。
有人知道会发生什么吗?
我已将 repo 上传到https://github.com/cultofmetatron/cassowary/tree/photogallary
我知道我的代码很烂,我仍在学习系统的来龙去脉,如果能深入了解正在发生的事情,我将不胜感激。
【问题讨论】:
-
我认为你的理论是正确的——很可能它会退回到帖子#show,因为那将(否则)是索引页面(也就是说,只有
/posts会处理帖子#show)。也就是说,它会查找 slug 为“新”的记录,但没有找到。你是如何设置 slugs 的(gem,还是你自己的?)—— gem 可能有一些路由魔法,这在routes.rb中可能不明显。运行rake routes以查看 Rails 认为的有效路径模式。 (哦,PS,这个问题的标题真棒:-) -
哈哈是的,我希望有人会注意到。 :P
-
(谢谢,我希望有人会注意到。无论如何,我从头开始滚动它以了解它是如何完成的。我添加了一个 url_slug 字符串添加到 post 模型中,并将 @post.url_slug 添加到每个rout 辅助方法。它适用于编辑、索引和显示,但不适用于 new。这很奇怪。
-
我添加了一个可能相对接近正确的答案。请尝试一下,看看我在哪里搞砸了,然后我会进行编辑以使其正确,这样下次我需要这样做时,我会记住......谁知道呢,也许其他人会觉得它有用.
标签: ruby-on-rails ruby routes ruby-on-rails-3.2 slug