使用 validate false 创建友好 ID

Creating a Friendly ID with validate false

我在我的应用程序中使用 friendly_id,但我将注册过程拆分为多个单独的步骤。

因此,当第一次创建记录时,它是在禁用验证的情况下完成的,然后注册过程的后续步骤填充空白,然后在最后一步,我调用更新,它只在以防万一一路上遗漏了什么。

不幸的是,没有为我的记录创建 slug。通过一些挖掘,似乎正在生成友好的 id before_validation。所以它永远不会被调用!

我该如何解决这个问题?

我在文档中看到您可以将 slug 设置为 nil 然后保存它,它将重新生成,但是当我在调用更新之前这样做时,它会抛出一条验证消息,因为 slug 为 nil! !在调用更新之前我也尝试了以下但仍然没有快乐:

if @channel.slug.blank?
  @channel.slug = nil
  @channel.save
end

对我能做什么有什么想法吗?

我最后修好了,你需要加一个!保存后,以下工作:

if @channel.slug.blank?
    @channel.slug = nil
    @channel.save!
end

有点遗憾,我不得不进行额外的数据库调用,但至少它在工作!

非常感谢看过的人

您可以通过执行

手动触发 friendly_id 生成
object.send :set_slug 

然后不验证直接保存

object.save(:validate => false)