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】:您可以使用这种方式,传递每个帖子的title
和id
,即使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
从 heroku slugs 中排除 gems 中的文件(使用 .slugignore、heroku)