Hi
begin
ActiveRecord::Base.transaction do
pb_status_history = ProblemStatusHistory.new
pb_status_history.problem_id = @problem.id
pb_status_history.problem_status_id = @problem.problem_status_id
pb_status_history.save! [email protected]_attribute(“problem_status_id”,‘ab’)
if ret_val==false
raise ActiveRecord::ActiveRecordError
end
end # end of transaction
rescue
puts 'error is '+$!
end
What I was trying to do above was to write a proper exception
handling for the above code.In Database table problem_status_id is an
integer field And I deliberatly wrote @problem.update_attribute(“problem_status_id”,‘ab’) So what i expect was
an exception there and which will be caught by the raised as
raise ActiveRecord::ActiveRecordError
and will be caught by rescue…But that did not happen.Could u please
tell me where the error is .Also in above I am using save! and put the
whole code in transaction block…So if suppose pb_status_history.save!
also results an exception need I to write another rescue for that also
or a single rescue do all these?
was
an exception there and which will be caught by the raised as
Unless you’ve got a validation or a foreign key constraint
ActiveRecord won’t care about that (i expect it would typecast it to 0
or something like that)
raise ActiveRecord::ActiveRecordError
and will be caught by rescue…But that did not happen.Could u please
tell me where the error is .Also in above I am using save! and put
the
whole code in transaction block…So if suppose pb_status_history.save!
also results an exception need I to write another rescue for that
also
or a single rescue do all these?
You don’t need more than one rescue block although if you wanted to do
different things in response to different exceptions then you’d
typically have multiple rescue blocks. Another thing to note (although
not relevant here) is that rescue with no arguments does not actually
rescue all exceptions, only those that descend from StandardError.
You may want to try explicitly putting the word Exception in the rescue
statement as follows:
begin
.
.
rescue Exception
… your exception handing code, at least print out the sub-class
end
Once you determine which particular exception is actually being raised,
you may want to further refine your rescue clause and catch it before
you fall through to the generic Exception.
I do know that you don’t need to explicitly mention a target for the
“rescue” statement. However, I have found it to be more consistent to
use at least a catch all Exception word explicitly.
Hope this helps.
Bharat
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.