如何将 id 添加到 Friendly_id slug?

Posted

技术标签:

【中文标题】如何将 id 添加到 Friendly_id slug?【英文标题】:How to add id to Friendly_id slug? 【发布时间】:2021-04-25 06:32:27 【问题描述】:

我对生成带有标题和 ID 的 slug 很感兴趣。否则,我会收到类似帖子收集路由覆盖单个帖子路由的错误。

class Post > ApplicationRecord
  extend FriendlyId
  friendly_id [:id, :title], use: :slugged
end
resources :posts do
  get "videos", on: :collection
end

slug "videos" 会与 "videos" 收集路径冲突。

是否可以生成带有 id 和 title 的 slug?

"#id_#title" # Friendly Id slug

【问题讨论】:

【参考方案1】:

Friendly Id 不能这样做,因为它在保存之前会生成 slug,所以它不会有 id https://github.com/norman/friendly_id/blob/master/lib/friendly_id/slugged.rb#L250

您可能需要使用to_param 方法来自定义:

class Post < ApplicationRecord
  def to_param
    "#id_#title".parameterize
  end
end

但是你需要编写自定义方法来查找记录 id,就像在你的控制器中一样:

def show
  id = params[:id].split('_')[0]
  post = Post.find(id)
end

【讨论】:

我不明白你的回答。我根本无法解决我的问题。 它是用来解决冲突路由的,我为你的问题更新了答案 我只是想知道是否可以使用friendly_id。

以上是关于如何将 id 添加到 Friendly_id slug?的主要内容,如果未能解决你的问题,请参考以下文章

friendly_id:可选择更新 slug

如何使用friendly_id用随机数混淆用户ID

如何使用 friendly_id 从 URL 中删除特定单词 |铁轨上的红宝石

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

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

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