在 rails 中创建 Active Record 对象后生成 slug
Generating a slug after Active Record object creation in rails
我正在尝试在使用 after_commit 回调创建对象后为该对象生成一个唯一的 slug。
after_commit :create_slug, on: :create
def create_slug
self.slug = generate_slug
self.save
end
当我尝试保存对象时出现 "stack level too deep" 错误。我假设是因为我正在保存对象,它一次又一次地被称为 after_commit 回调。
在这种情况下生成和保存唯一 slug 的最佳方法是什么?
我建议在创建时使用 after_validation 回调而不是 after_commit。您将调用多个事务,这不是此回调的目的。我会做的是:
after_validation(on: :create) do
self.slug = generate_slug
end
还要确保 generate_slug 中没有进行任何保存操作。该方法应该只是返回一个值以插入到 slug 属性中。
使用不触发回调的方法,例如:update_column
def create_slug
update_column('slug ', generate_slug)
end
我正在尝试在使用 after_commit 回调创建对象后为该对象生成一个唯一的 slug。
after_commit :create_slug, on: :create
def create_slug
self.slug = generate_slug
self.save
end
当我尝试保存对象时出现 "stack level too deep" 错误。我假设是因为我正在保存对象,它一次又一次地被称为 after_commit 回调。
在这种情况下生成和保存唯一 slug 的最佳方法是什么?
我建议在创建时使用 after_validation 回调而不是 after_commit。您将调用多个事务,这不是此回调的目的。我会做的是:
after_validation(on: :create) do
self.slug = generate_slug
end
还要确保 generate_slug 中没有进行任何保存操作。该方法应该只是返回一个值以插入到 slug 属性中。
使用不触发回调的方法,例如:update_column
def create_slug
update_column('slug ', generate_slug)
end