Tuesday, March 5, 2013

Re: [Rails] Save method behaviour changed?

On Tue, March 5, 2013 19:13, tamouse mailing lists wrote:
> On Tue, Mar 5, 2013 at 1:32 PM, byrnejb <byrnejb@harte-lyne.ca> wrote:
>> I have this code in a working RoR-3.1 app:
>>
>> # save
>> #
>> # Override AR save method to catch DBMS specific errors
>> # such as uniqueness constraint violations
>> def save
>> super
>> rescue ActiveRecord::StatementInvalid => this_exception
>> errors.add( currency_code, hll_ar_exception( this_exception )
>> )
>> false
>> end
>>
>> In RoR-3.2.12 this no longer works. Once I pass a save involving a
>> duplicate record it never returns to the calling method. For
>> example:
>>
>> def save
>> super
>> fail( " die die die " )
>> rescue ActiveRecord::StatementInvalid => this_exception
>>
>> produces no output and does not throw an exception but in the log
>> file I see
>> this none-the-less:
>>
>> PG::Error: ERROR: duplicate key value violates unique constraint
>> "idxu_currencies_currency_code"
>> DETAIL: Key (currency_code)=(JPY) already exists.
>>
>>
>> How do I get the old behaviour back? Calling save! instead super
>> does not
>> change the outcome.
>
> I don't know the answer to your question, but I'm wondering if you can
> circumvent the exception altogether by using valid? to see if it's a
> valid record before attempting the save?
>

Rails validation for duplicate records is, to put it bluntly, a joke.
The code I wrote is intended to compensate for that fact by using the
DBMS as it is intended to be used. Up to the current version of Rails
this worked as I intended. Now it does not. I simply want to
discover what has changed and how I get around it.


--
*** E-Mail is NOT a SECURE channel ***
James B. Byrne mailto:ByrneJB@Harte-Lyne.ca
Harte & Lyne Limited http://www.harte-lyne.ca
9 Brockley Drive vox: +1 905 561 1241
Hamilton, Ontario fax: +1 905 561 0757
Canada L8E 3C3

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate