友好 ID slug 不包含 id

2024-02-28

我想要这样的网址:

http://domain.com/products/454-table-lamp

所以我像这样使用Friendly_id:

extend FriendlyId

friendly_id :slug_candidates, use: :history

def slug_candidates
  [
      [:id, :title]
  ]
end

现在,由于友好的 id 在保存对象之前生成了 slug,我最终得到一个像这样的 url(请注意 URL 中缺少的 id):

http://domain.com/products/table-lamp

现在虽然这还不算太糟糕。一旦我保存另一个名为“台灯”的产品,我就会得到如下 URL:

http://domain.com/products/table-lamp-ebaf4bf5-a6fb-4824-9a07-bdda34f56973

所以我的问题是,如何确保友好 ID 也创建包含该 ID 的 slug。


只需向您的模型添加 after_commit 回调即可。在此回调中,将 slug 设置为 nil 并保存:

  after_commit :update_slug, on: :create

  def update_slug
    unless slug.include? self.id.to_s
      self.slug = nil
      self.save
    end
  end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

友好 ID slug 不包含 id 的相关文章

随机推荐