【问题标题】:Routing without the model name没有模型名称的路由
【发布时间】:2012-01-04 15:23:18
【问题描述】:

使用 questionrailscast 63 我将我的文章路由到文章/article_permalink。

我希望它们可以在 url 中没有模型名称的情况下访问,因此 my-domain.com/article_permalink 直接路由到文章。我只希望这发生在表演动作中。这可能吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 routes


    【解决方案1】:

    我认为你需要类似 ...

    (在 routes.rb 中)

     match '/:id' => 'articles#show', :via => 'get'
    

    (需要放在最后,或者接近路由的末尾,因为它可以匹配针对其他路由的请求)

    要更改 article_path(...) 助手,“as”可能会有所帮助:http://guides.rubyonrails.org/routing.html#overriding-the-named-helpers

    或者您可以为该特定路径添加帮助器。

    【讨论】:

    • 马上就可以了,谢谢。 “as”似乎用于将注册重新路由到新的或图像到照片等 - 我看不出我会如何使用它来完全错过模型名称。您对如何使 link_to 显示永久链接而不是文章/永久链接有任何建议。
    • 您可以添加 article_path 帮助器...我认为这就是生成 url 的方法。我会调查:作为选项,我仍然认为这可能会做你想做的事,尽管我不肯定。并确保不会干扰您的其他文章路径(更新、删除等)。
    【解决方案2】:

    如果我理解您的问题,您希望与路线“articles/article_permalink”相关联的模型根据从列表中选择的文章是动态的吗?

    您愿意将模型 ID 作为查询字符串附加到 URL 的末尾吗?更复杂的方法是让您的链接 POST,将模型 ID 作为隐藏的输入字段。您的控制器可以确定它是否通过 get/post 访问,并相应地处理它,但感觉不对。

    无论如何,当控制器动作基于对“articles/article_permalink”的请求被触发时,它必须知道要获取哪个模型。由于 HTTP 是无状态的,因此必须传入一些东西。您可以花点时间编写 JavaScript 来触发一个 AJAX 调用,设置一个会话变量,然后触发 GET,但这很麻烦。

    我希望我理解了这个问题......

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多