【问题标题】:Random slug url for friendly id gem in Rails 4Rails 4中友好id gem的随机slug url
【发布时间】: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)

标签: ruby-on-rails ruby-on-rails-4 friendly-id


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-07-19
    • 2013-04-13
    • 2016-04-16
    • 2015-09-08
    • 2016-05-15
    • 2016-11-21
    • 2015-06-11
    • 2017-03-10
    • 1970-01-01
    相关资源
    最近更新 更多