diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-10-19 13:18:47 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-10-19 13:18:47 +0100 |
commit | eb72e62c3042c0df989d951b1d12291395ebdb8e (patch) | |
tree | 258c2dc61b2e146fb2cdef47d2799ea9dbdaa004 /activerecord/CHANGELOG.md | |
parent | 0d7b0f0183ce9f1bfc524cf6afd5d7de852ebc76 (diff) | |
download | rails-eb72e62c3042c0df989d951b1d12291395ebdb8e.tar.gz rails-eb72e62c3042c0df989d951b1d12291395ebdb8e.tar.bz2 rails-eb72e62c3042c0df989d951b1d12291395ebdb8e.zip |
Add Relation#find_or_create_by and friends
This is similar to #first_or_create, but slightly different and a nicer
API. See the CHANGELOG/docs in the commit.
Fixes #7853
Diffstat (limited to 'activerecord/CHANGELOG.md')
-rw-r--r-- | activerecord/CHANGELOG.md | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 186c7bf244..1edcd7cfc8 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,35 @@ ## Rails 4.0.0 (unreleased) ## +* Add `find_or_create_by`, `find_or_create_by!` and + `find_or_initialize_by` methods to `Relation`. + + These are similar to the `first_or_create` family of methods, but + the behaviour when a record is created is slightly different: + + User.where(first_name: 'Penélope').first_or_create + + will execute: + + User.where(first_name: 'Penélope').create + + Causing all the `create` callbacks to execute within the context of + the scope. This could affect queries that occur within callbacks. + + User.find_or_create_by(first_name: 'Penélope') + + will execute: + + User.create(first_name: 'Penélope') + + Which obviously does not affect the scoping of queries within + callbacks. + + The `find_or_create_by` version also reads better, frankly. But note + that it does not allow attributes to be specified for the `create` + that are not included in the `find_by`. + + *Jon Leighton* + * Fix bug with presence validation of associations. Would incorrectly add duplicated errors when the association was blank. Bug introduced in 1fab518c6a75dac5773654646eb724a59741bc13. @@ -607,9 +637,9 @@ * `find_or_initialize_by_...` can be rewritten using `where(...).first_or_initialize` * `find_or_create_by_...` can be rewritten using - `where(...).first_or_create` + `find_or_create_by(...)` or where(...).first_or_create` * `find_or_create_by_...!` can be rewritten using - `where(...).first_or_create!` + `find_or_create_by!(...) or `where(...).first_or_create!` The implementation of the deprecated dynamic finders has been moved to the `activerecord-deprecated_finders` gem. See below for details. |