我想要这样的网址:
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(使用前将#替换为@)