简体   繁体   中英

In rails, how can I find out what caused a .save() to fail, other than validation errors?

I have an ActiveRecord model which is returning true from valid? (and .errors is empty), but is returning false from save() . If the model instance is valid, how can I find out what's causing the save to fail?

Try using the bang version save! (with an exclamation mark at the end) and inspecting the resulting error.

如果@user.save (例如)返回false ,那么只需运行它以获取所有错误:

@user.errors.full_messages

Check all your callbacks.

I had a problem like this where I had and "after_validate" method that was failing after I had made a bunch of changes to the model. The model was valid but the "after_validate" was returning false, so if I used model.valid it said true, but then if I saved it gave me validation errors (passed through from the after_validate callback). It was weird.

Look at the application trace and you should be able to see what line of code is raising the exception.

是的,我通过确保我在所有 before_* 回调中返回 true 然后它开始工作来解决这个问题:)

Make sure you aren't trying to save a deleted record.

I had the same issue. But unlike the selected answer - my issue wasn't callbacks related.

In my case I had tried to save to a deleted record (deleted from DB).

@user = User.new
@user.save! # user saved to DB
@user.persisted? # true

@user.destroy # user deleted from DB
@user.persisted? # false, user still has its id

@user.valid? # return true
@user.errors # empty
@user.save # return false
@user.save! # raise ActiveRecord::RecordNotSaved

The problem I had was that I had forgotten to add the validation to the model.

class ContactGroup < ActiveRecord::Base
  validates_presence_of :name
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM