无法更新after_create回调的新记录

时间:2015-06-08 05:34:17

标签: ruby-on-rails

class Model < ActiveRecord::Base
  after_create :set_slug

  def set_slug
    update_column(:slug, to_slug)
  end

  def to_slug
    #code to create slug
  end
end

如果回调是after_create,为什么这会返回'ActiveRecord :: ActiveRecordError:无法更新新记录'?问题在于“update_column”

2 个答案:

答案 0 :(得分:4)

您的问题在于update_columns无法处理新记录。 为什么不使用update_attributes`而不是

  after_create do
    self.update_attributes(slug: to_slug)
  end

如果您愿意,您也可以尝试以下方法

if new_record?
  return
else
 update_column(:slug, to_slug)
end

同时检查模型侧验证。这也可能导致问题。

答案 1 :(得分:2)

ActiveRecord::Persistence::ClassMethods#update_columns方法,其中包含行

raise ActiveRecordError, "cannot update a new record" if new_record?

因此您应该使用update_all,例如:

 def set_slug
   self.class.where(id: id).update_all(slug: to_slug) if id
 end

希望它会有所帮助