【问题标题】:Replace "%20" with "-" in URL for rails在 Rails 的 URL 中将“%20”替换为“-”
【发布时间】:2011-10-08 04:57:32
【问题描述】:

我正在使用 Rails 开发一个 Web 应用程序。 出于美学目的,我需要将 %20 替换为 -

之前:http://localhost:3000/movies/2006/Apna%20Sapna%20Money%20Money

之后:http://localhost:3000/movies/2006/Apna-Sapna-Money-Money

无论如何我可以在rails中实现这一点吗?

【问题讨论】:

    标签: ruby-on-rails ruby regex url


    【解决方案1】:

    https://github.com/FriendlyId/friendly_id

    这是处理 seo 网址的最佳方式

    【讨论】:

    • 404 这里没有 GitHub 页面。
    【解决方案2】:

    您可能希望将“Apna-Sapna-Money-Money”作为属性保存在您的Movies 模型中(我通常称这些为slugs)。然后,要生成这些,您可能只需要用连字符替换电影标题中的空格。比如:

    class Movie
      before_create :generate_slug
    
      private
      def generate_slug
        slug = title.gsub(" ", "-")
      end
    end
    

    然后在您的控制器操作中,您可以简单地调用Movie.find_by_slug!(params[:id])

    基本上,用户应该没有任何理由到达一个包含 %20 的 URL...

    【讨论】:

      【解决方案3】:

      您应该使用URI.parse 将其分成几部分,然后只更改路径组件:

      require 'uri'
      u      = URI.parse(url)
      u.path = u.path.gsub('%20', '-')
      url    = u.to_s
      

      在整个 URL 上只需一个简单的gsub 可能会正常工作,但一点额外的偏执可能会为您节省一些困惑和痛苦。此外,如果您只是替换文字字符串而不是正则表达式,则可以使用 String 作为 gsub 的第一个参数,并避免一些转义问题:

      模式通常是一个正则表达式;如果作为字符串给出,它包含的任何正则表达式元字符都将按字面解释,例如'\\d' 将匹配后跟 d 的反冲,而不是数字。

      【讨论】:

      • 我在哪里更改此代码?视频控制器还是 routes.rb?
      • @Wen:您可能想在模型中添加 slug 并通过 slug 引用模型。对“rails slug”广告进行一些谷歌搜索,您应该会找到一些指示。
      【解决方案4】:

      如果您的字符串存储在变量url 中,您可以使用

      url.gsub(/%20/, "-")
      

      返回你想要的字符串,或者

      url.gsub!(/%20/, "-")
      

      用你想要的值实际修改url的值。

      【讨论】:

        猜你喜欢
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        相关资源
        最近更新 更多