【问题标题】:Rails 3 URL without controller name没有控制器名称的 Rails 3 URL
【发布时间】:2012-06-29 22:23:57
【问题描述】:

假设我想在我的网站上创建一个包含 Rails 3 的博客,这将是我唯一拥有的东西。我想使用 Rails 来实现它,但我不喜欢 Rails 生成的 URL。我想要这样的网址:

example.com/2012/05/10/foo

我不想要我知道该怎么做的事情(使用 to_param):

example.com/entries/2012/05/10/foo

我仍然想使用类似的助手

new_entry_path(@entry) # -> example.com/new
entry_path(@entry) # -> example.com/2012/05/10/foo
edit_entry_path(@entry) # -> example.com/2012/05/10/foo/edit
destroy_entry_path(@entry)
form_for(@entry)
link_to(@entry.title, @entry)

等等。然后我将拥有 cmets,并希望它们也可以作为自己的资源访问,例如

example.com/2012/05/10/foo/comments/5

这些网址也应该可以通过普通助手获得:

edit_entry_comment_path(@entry, @comment) # -> example.com/2012/05/10/foo/comments/5/edit

或类似的东西。

那么是否有可能在没有控制器名称的情况下获取 URL 并仍然使用 url 辅助方法?只需覆盖 to_param 将始终只更改 url 中控制器名称之后的部分。获取一些示例代码会很有帮助。

【问题讨论】:

    标签: ruby-on-rails routes urlhelper


    【解决方案1】:

    您的routes.rb 可能有这样一行:

    resources :entries
    

    产生/entries/2012/05/10/foo形式的路由。


    存在一个:path 参数,允许您使用除默认名称entries 之外的其他名称。例如:

    resources :entries, :path => 'my-cool-path'
    

    将生成/my-cool-path/2012/05/10/foo 形式的路由。


    但是,如果我们将空字符串传递给:path,我们会看到您正在寻找的行为:

    resources :entries, :path => ''
    

    将生成/2012/05/10/foo 形式的路由。

    【讨论】:

    • 是的,我正在尝试自己解决这个问题——不仅仅是一个,而是两个!也许这是对解决方案看似粗略的反对(我可以看到直觉表明路线将是 //2012/05/10/foo 并带有一个额外的前面的斜线),但它确实有效,并且绝对比重新实现所有的更容易和更多 Rails-y足智多谋的手工路线。
    • 是的。我到的时候是-3。也许是因为您指定的路线实际上没有 /year/month/date 的东西?
    • @jaredonline:从问题的措辞来看,我假设 OP 已经在资源丰富的路线的上下文中实现了年/月/日,所以路径参数就是剩下要添加的:/ 嗯。
    猜你喜欢
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 2011-12-31
    相关资源
    最近更新 更多