FriendlyID - 在保存之前分配一个slug

时间:2017-01-16 15:04:18

标签: ruby-on-rails friendly-id

我有一个ActivityType模型,它在创建后创建一个动态页面,其中一个slug等于ActivityType的slug。

如果这个slug已经存在一个页面,它会抛出一个验证错误,所以我在尝试保存之前更改了ActivityType的slug,假设已经存在一个带有该slug的Dynamic页面。

我已经写了以下代码:

def check_and_change_slug
  n = 1
  slug = title
  while DynamicPage.exists?(slug: slug)
    slug = title + "-#{n}"
    n + 1
  end
end

我的问题是,如果我在保存记录之前执行此代码,友情ID是否会尝试创建一个新的slug,或者只是选择我手动分配的那个?

我查看了文档,但似乎无法找到任何内容。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用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