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