如何使用 friendly_id 从 URL 中删除特定单词 |铁轨上的红宝石
Posted
技术标签:
【中文标题】如何使用 friendly_id 从 URL 中删除特定单词 |铁轨上的红宝石【英文标题】:How to remove specific words from a URL using friendly_id | ruby on rails 【发布时间】:2018-12-02 16:45:25 【问题描述】:我正在为我的 rails 应用程序使用 friendly_id,并注意到它逐字逐句地放入了一个 slug 中。我想知道是否有一种方法可以解析包含非 SEO 相关单词(例如“and”和“for”)的 slug。我尝试了一些REGEX
,但我什至不确定它是否适用于friendly_id
。
在我的申请记录(模型)中:
def to_slug(param=self.slug)
# strip the string
ret = param.strip
#blow away apostrophes
ret.gsub! /['`]/, ""
# @ --> at, and & --> and
ret.gsub! /\s*@\s*/, " at "
ret.gsub! /\s*&\s*/, " and "
# replace all non alphanumeric, periods with dash
ret.gsub! /\s*[^A-Za-z0-9\.]\s*/, '-'
# replace underscore with dash
ret.gsub! /[-_]2,/, '-'
# convert double dashes to single
ret.gsub! /-+/, "-"
# strip off leading/trailing dash
ret.gsub! /\A[-\.]+|[-\.]+\z/, ""
ret
end
我绝对不是正则表达式方面的专家,我希望得到一些帮助,谢谢。
附:我的 to_slug 方法是否适用于friendly_id
?我不知道 gem 是否已经执行了所有这些操作,谢谢!
【问题讨论】:
【参考方案1】:您将需要查看 friendly_id 文档,其中提供了有关 Working With Slugs 的更多信息
您的模型可能看起来像这样(更新它以适应您的正则表达式需求):
class SampleModel < ActiveRecord::Base
extend FriendlyId
friendly_id :custom_friendly_id
# Insert more logic here
def custom_friendly_id
your_column.gsub! /\s*&\s*/, " and "
end
end
我为之前的应用程序执行此操作,但遇到了旧数据的路由问题。我最终将:slugged
添加到我的friendly_id
命令中:friendly_id :custom_friendly_id, use: :slugged
。然后运行迁移脚本来更新我的模型中的slug
属性以正确呈现页面。
希望这会有所帮助。
【讨论】:
谢谢,我会查看“使用 slugs”文档。替换字符串前后的空格是否重要? 这只是一个如何自定义friendly_id
的示例。我没有写出完整的正则表达式来满足您的用例以上是关于如何使用 friendly_id 从 URL 中删除特定单词 |铁轨上的红宝石的主要内容,如果未能解决你的问题,请参考以下文章
通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id
导轨/Friendly_id。如何为旧的(丑陋的)URL 呈现 404 页面
Rails friendly_id 不会在 heroku 上的现有用户上呈现