#create_or_find_by
: find_first
option
#44885
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Updates
#create_or_find_by
to accept an optionaloptions
key tohouse a new
find_first
flag. This flag specifies that the method runsa
#find_by
before attempting the create.Other Information
This can help mitigate a few potential issues:
create a record once with all subsequent calls using
#find_by
as afallback. The proactive
#find_by
can skip the create/rescue loop andmostly rely on the initial fetch.
exists (ie. some versions of MySQL increment the PK on INSERT,
regardless of whether or not it succeeds). References Using
create_or_find_by
led to primary keys running out #35543Previous implementation / inspiration
Open questions for reviewers
(ie.
def method(hash_one, hash_two)
options: { foo: :bar}
raises an error.