我正在使用rails开发一个web应用程序。为了美观起见,我需要将%20替换为-
电影: http://localhost: 3000//2006/Apna % 20 sapna % 20 % 20钱
电影后:http://localhost: 3000//2006/Apna-Sapna-Money-Money
无论如何我可以在rails中实现这一点?
您应该使用URI.parse
将其分成几个部分,然后仅更改路径组件:
require 'uri'
u = URI.parse(url)
u.path = u.path.gsub('%20', '-')
url = u.to_s
在整个URL上一个简单的gsub
可能会工作得很好,但是一点额外的偏执可能会为您节省一些困惑和痛苦。此外,如果您只是替换字符串而不是正则表达式,则可以使用string作为gsub
的第一个参数并避免一些转义问题:
模式通常是一个Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如'\d'
将匹配后跟d
的反弹,而不是数字。
如果字符串存储在变量url
中,则可以使用
url.gsub(/%20/, "-")
返回你想要的字符串,或者
url.gsub!(/%20/, "-")
将url
的值修改为您想要的值
https://github.com/FriendlyId/friendly_id
这是搜索引擎优化url的最佳方式
您可能希望在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的URL…