如何使用 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 上的现有用户上呈现

如何配置friendly_id gem的序列分隔符

使用friendly_id时如何find_by_id(对于多态关系)

Rails gem“friendly_id”:如何在创建对象之前获得 slug 的实时预览