【问题标题】:Adding title to rails route为rails路线添加标题
【发布时间】:2010-03-09 16:32:18
【问题描述】:

我有 List 对象,如下所示:

www.mysite.com/lists/123

其中 123 是列表的 id。我想做的是将列表的标题添加到 url 中,以便提供更多信息(对于 google 或其他)。所以我希望它看起来像:

www.mysite.com/lists/123/title-of-list-number-123

您如何添加到这样的网址?如果你只是输入: www.mysite.com/lists/123 没有标题,它应该找到标题然后重定向到新路线吗?

【问题讨论】:

    标签: ruby-on-rails routing url-rewriting


    【解决方案1】:

    如果你想保持你的查找调用(按 id),你可以做与 mplacona 建议相反的事情:

    def to_param
      "#{id}-#{title.parameterize}"
    end
    

    有了这个,你的 find(params[:id]) 将起作用,因为它将字符串转换为整数(只有当数字在字符串的开头时才能成功)。所以这实际上会起作用:

    List.find("123-my-title")
    

    将与

    相同
    List.find(123)
    

    在此处阅读有关此功能和其他方法的更多信息:http://gregmoreno.ca/how-to-create-google-friendly-urls-in-rails/

    参数化会自动将字符串转换为“漂亮”的 url。在这里阅读更多:http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Inflections.html#M001367

    如果您想要更多功能,我也建议friendly_id

    【讨论】:

      【解决方案2】:

      这篇文章准确地说明了你需要做些什么来完成这个。

      http://railscasts.com/episodes/63-model-name-in-url

      更新

      将永久链接添加到您的模型中,并按如下方式保存:

      def to_param
        "#{permalink}-#{id}"
      end
      

      在你的控制器上,不是通过 id 获取东西,而是通过 pemalink 获取它们:

      @product = Product.find_by_permalink(params[:id])
      

      这就是你所需要的。

      屏幕截图解释了如何操作的所有步骤。

      【讨论】:

        【解决方案3】:

        如果您想购买 gem/插件,也可以查看 friendly id

        【讨论】:

          猜你喜欢
          • 2011-04-09
          • 2011-02-12
          • 2012-03-24
          • 2021-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-11
          • 1970-01-01
          相关资源
          最近更新 更多