使用validate false创建友好ID

时间:2015-11-20 19:13:17

标签: ruby-on-rails-4 friendly-id

我在我的应用中使用了friendly_id,但我正在拆分注册流程,以便将其拆分为单独的步骤。

因此,当首次创建记录时,它会在禁用验证的情况下完成,然后注册过程的后续步骤填入空白,然后在最后一步,我调用更新,以便在以防万一的情况下进行验证一路上都被遗漏了。

不幸的是,虽然没有为我的记录创建slug。从某些挖掘中,似乎正在生成友好ID before_validation。所以它永远不会被召唤!

我怎样才能解决这个问题?

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

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

关于我能做什么的任何想法?

2 个答案:

答案 0 :(得分:7)

您可以通过执行

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

然后保存而不进行验证

object.save(:validate => false)

答案 1 :(得分:0)

我把它固定到最后,你需要添加一个!保存之后,以下工作:

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

有点遗憾我必须进行额外的数据库调用,但至少它正在运行!

非常感谢那些看起来很

的人