FriendlyID - 在保存之前分配一个 slug
FriendlyID - Assigning a slug before it is saved
我有一个 ActivityType 模型,它在创建后创建一个动态页面,其中的 slug 等于 ActivityType 的 slug。
如果一个页面已经存在这个 slug,它会抛出一个验证错误,所以我试图在保存之前更改 ActivityType 的 slug,假设一个 Dynamic 页面已经存在这个 slug。
我写了下面的代码:
def check_and_change_slug
n = 1
slug = title
while DynamicPage.exists?(slug: slug)
slug = title + "-#{n}"
n + 1
end
end
我的问题是,如果我在保存记录之前执行此代码,Friendly ID 会尝试创建一个新的 slug,还是直接使用我手动分配的那个?
我已经查看了文档和 SO,但似乎找不到任何东西。
提前致谢。
您可以使用 candidates
功能来实现此目的:
class ActivityType < ActiveRecord::Base
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
def slug_candidates
n = 1
slug = title
while DynamicPage.exists?(slug: slug)
slug = title + "-#{n}"
n += 1
end
end
end
我有一个 ActivityType 模型,它在创建后创建一个动态页面,其中的 slug 等于 ActivityType 的 slug。
如果一个页面已经存在这个 slug,它会抛出一个验证错误,所以我试图在保存之前更改 ActivityType 的 slug,假设一个 Dynamic 页面已经存在这个 slug。
我写了下面的代码:
def check_and_change_slug
n = 1
slug = title
while DynamicPage.exists?(slug: slug)
slug = title + "-#{n}"
n + 1
end
end
我的问题是,如果我在保存记录之前执行此代码,Friendly ID 会尝试创建一个新的 slug,还是直接使用我手动分配的那个?
我已经查看了文档和 SO,但似乎找不到任何东西。
提前致谢。
您可以使用 candidates
功能来实现此目的:
class ActivityType < ActiveRecord::Base
extend FriendlyId
friendly_id :slug_candidates, use: :slugged
def slug_candidates
n = 1
slug = title
while DynamicPage.exists?(slug: slug)
slug = title + "-#{n}"
n += 1
end
end
end