如果after_create失败,则不会发生Rails事务回滚

时间:2016-08-01 12:55:49

标签: ruby-on-rails

在我的User模型中,我有一个after_created回调为

after_create :count_files
def count_files
  errors[:base] << "error working"
  errors.add(:base, "error working")        
  return false
end

正如您所看到的,我总是添加基本错误并始终返回false,但仍然创建了用户。我认为,如果after_create返回false,则会发生自动回滚,而不是将数据保存在数据库中。但就我而言,数据始终保存在数据库中,事务回滚也不会发生。这是为什么?如果after_create失败,我怎样才能阻止创建用户?

1 个答案:

答案 0 :(得分:2)

after_create表示事务已经关闭,对象已经创建。

而是after_create您需要添加自定义验证,例如:

validate :count_files

private

def count_files
   count = counting_hear
   errors.add(:base, "error working")  if count < 10
end

<强> EDITED

但是如果你想使用回调(after_create),只需提高exeption return false

after_create :count_files

def count_files
  errors[:base] << "error working"
  errors.add(:base, "error working")        
  raise MySuperCustomExeption
end