[rspec-users] Question on SQL exceptions

Tim Glen tim at pivotib.com
Mon Mar 9 21:56:28 EDT 2009

>> Just a stab in the dark, but I haven't seen any mention of calling
>> save vs. save!. save just puts any errors in the model, save! will
>> raise the exception if there are any errors. That may not be the case
>> for ActiveRecord:StatementInvalid exception, but I thought i'd  
>> mention
>> it anyway.

> I wondered about this but I think that since the DBMS exception is not
> being trapped at all that it makes no difference. However, I will  
> check
> if if it does or not anyway.

Right - this is from the validates_uniqueness_of documentation:
#   When the database catches such a duplicate insertion,
#   ActiveRecord::Base#save will raise an ActiveRecord::StatementInvalid
#   exception. You can either choose to let this error propagate (which
#   will result in the default Rails exception page being shown), or you
#   can catch it and restart the transaction (e.g. by telling the user
#   that the title already exists, and asking him to re-enter the  
#   This technique is also known as optimistic concurrency control:
#   http://en.wikipedia.org/wiki/Optimistic_concurrency_control

so it _should_ be bubbling through. Odd that it would change in Ruby  
1.8.6, but it's worth a try.


More information about the rspec-users mailing list