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”
答案 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
希望它会有所帮助