有没有办法在验证通过时生成friendly_id?

时间:2015-03-27 12:44:08

标签: ruby-on-rails friendly-id

目前,保存前会生成friendly_id。因此,如果表单中有任何错误,它将生成友好ID并重新加载。问题是我使用javascript批量编辑表单字段。我通过ID来选择要编辑的字段。例如,要查找类别,我会生成脚本以查找photos_61081719_category midle部分是ID。如果表单重新加载有错误,此ID将转为友好ID,从而破坏脚本。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

正如@JustMichael所说,使用before_save回调应该完全符合你的要求。这是the API callback documentation。从技术上讲,你并没有说你明确地使用了这个回调,所以这可能是问题所在。

class Category
  before_save :generate_friendly_id # this code is only called if there are no errors

  private

  def generate_friendly_id
    # ...
  end
end

如果仍然生成友好ID,则可能表示您的验证正在通过。如果您实际上正在更改模型的主键(意味着您使用friendly_idCategory的{​​{1}}值,则必须确保这将是一个唯一值,否则模型将通过验证但在底层数据库遇到pk而不是唯一约束时无法创建。

内置的唯一性验证不会对此产生影响,因为您在验证后生成了id