This project is archived and is in readonly mode.

find_or_create_by on an association always creates new records
Reported by Casey Dreier | March 5th, 2011 @ 09:23 PM
Calling a dynamic find_or_create_by_ method on an association always ends up creating a new record because it improperly queries the database when attempting to find the record with the given values.
Attached is a test on a has_many association demonstrating this problem, as well as a simple patch that fixes it (spoiler: the finder arguments were passed incorrectly from a recent patch on this method).
Comments and changes to this ticket
-
Casey Dreier March 5th, 2011 @ 09:28 PM
Just to be clear, this bug report and patch are for Rails 2.3.11.
-
Jon Jensen March 22nd, 2011 @ 07:44 PM
In addition to the incorrect behavior, it can also cause unhandled exceptions for postgres. For example, company.employees.find_or_create_by_group_id_and_name(1, 'bob') would generate some SQL like "... group_id IN (1, 'bob') AND name IS NULL". In postgres you get an error, since 'bob' hasn't been explicitly cast to an integer.
-
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>