我正在使用rails开发Web应用程序。 出于美学目的,我需要用 -
替换%20之前:http://localhost:3000/movies/2006/Apna%20Sapna%20Money%20Money
之后:http://localhost:3000/movies/2006/Apna-Sapna-Money-Money
无论如何我能在铁轨上实现这个目标吗?
答案 0 :(得分:3)
您应该使用URI.parse
将其分成几部分,然后仅更改路径组件:
require 'uri'
u = URI.parse(url)
u.path = u.path.gsub('%20', '-')
url = u.to_s
在整个网址上只是一个简单的gsub
可能会正常工作,但是一点额外的偏执可能会让你在路上遇到一些困惑和痛苦。此外,如果您只是替换文字字符串而不是正则表达式,则可以使用String作为gsub
的第一个参数,并避免一些转义问题:
模式通常是Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如,
'\\d'
将匹配后跟d
的反对,而不是数字。
答案 1 :(得分:2)
如果您的字符串存储在变量url
中,则可以使用
url.gsub(/%20/, "-")
返回所需的字符串,或
url.gsub!(/%20/, "-")
使用您想要的值实际修改url
的值。
答案 2 :(得分:1)
https://github.com/FriendlyId/friendly_id
这是关于seo urls的最佳方式
答案 3 :(得分:0)
您可能希望在Movies
模型中将“Apna-Sapna-Money-Money”保存为属性(我通常称之为slug
s)。然后,要生成这些,您可能只需要用连字符替换电影标题中的空格。类似的东西:
class Movie
before_create :generate_slug
private
def generate_slug
slug = title.gsub(" ", "-")
end
end
然后在您的控制器操作中,您只需进行Movie.find_by_slug!(params[:id])
来电。
基本上,用户应该没有理由到达包含%20的网址...