Rails 4中友好id gem的随机slug url

Posted

技术标签:

【中文标题】Rails 4中友好id gem的随机slug url【英文标题】:Random slug url for friendly id gem in Rails 4 【发布时间】:2016-08-17 23:02:38 【问题描述】:

有没有人使用 random_slug (https://github.com/josei/random_slug) 作为friendly_id?上次更新是在 5 年前,所以我不确定尝试它是否浪费时间,或者是否有更好的解决方案?

基本上,我有friendly_id 工作,因为它可以获取我的帖子的标题,并且我有一个范围,因此这些帖子对用户来说是独一无二的,但我非常希望这些帖子是一个随机生成的 URL,类似于我想是 YouTube 网址 - 使用友好的 ID 是否可行,或者我是否以错误的方式处理此问题,还有其他东西可以让我的生活轻松 100 倍吗?

【问题讨论】:

为什么你只使用 slug -> Digest::SHA1.hexdigest(TEXT GOES HERE)[0..8] 我可以在任何地方阅读更多相关信息吗?我是新手,正在尝试通过一个项目来学习。感谢您的帮助! 你想打你的帖子网址吗? 是的,例如 - 生成的每个帖子的帖子/(随机唯一 slug) 【参考方案1】:

那个插件不能工作,至少不能单独工作。它被设计为与今天的 gem 不兼容的 rails 2 插件 - 但如果你查看它的 lib,它所做的一切就是生成一个随机字符串,正如评论中指出的那样,你可以使用 SHA1 摘要来完成。我喜欢安全随机。 (同一个概念)

你的模型看起来像这样

class Post < ActiveRecord::Base
  extend FriendlyId
  friendly_id :generated_slug, use: :slugged
  def generated_slug
    require 'securerandom' 
    @random_slug ||= persisted? ? friendly_id : SecureRandom.hex(15) 
  end
end

【讨论】:

完美,谢谢!我现在将阅读更多相关信息——感谢您和 7urkm3n!【参考方案2】:

您可以使用这种方式,传递每个帖子的titleid,即使title 相同,它也会为您生成新的uniq slug,因为会传递额外的id

确保使用您自己的列名title 或其他...

class Post < ActiveRecord::Base
  extend FriendlyId
  friendly_id :slugging, use: [:slugged, :history, :finders]

    def slugging
        Digest::SHA1.hexdigest("#title #id")[0..8]
    end
end

【讨论】:

以上是关于Rails 4中友好id gem的随机slug url的主要内容,如果未能解决你的问题,请参考以下文章

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

Rails 友好 ID:在 model.new 或 model.import 上未生成 slug

在没有在模型中定义的情况下在 rails 中创建 slug

从 heroku slugs 中排除 gems 中的文件(使用 .slugignore、heroku)

Rails:Friendly_id 不会为旧记录生成 slug

通过 Friendly_Id Gem 在 URL 中使用 Slug 和 id