File tree Expand file tree Collapse file tree 2 files changed +39
-1
lines changed Expand file tree Collapse file tree 2 files changed +39
-1
lines changed Original file line number Diff line number Diff line change @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
10
10
11
11
For a steady stream of TILs, [ sign up for my newsletter] ( https://tinyletter.com/jbranchaud ) .
12
12
13
- _ 1046 TILs and counting..._
13
+ _ 1047 TILs and counting..._
14
14
15
15
---
16
16
@@ -690,6 +690,7 @@ _1046 TILs and counting..._
690
690
- [ Show Rails Models With Pry] ( rails/show-rails-models-with-pry.md )
691
691
- [ Show Rails Routes With Pry] ( rails/show-rails-routes-with-pry.md )
692
692
- [ Skip Validations When Creating A Record] ( rails/skip-validations-when-creating-a-record.md )
693
+ - [ Specify New Attributes For #find_or_create_by] ( rails/specify-new-attributes-for-find-or-create-by.md )
693
694
- [ Temporarily Disable strong_params] ( rails/temporarily-disable-strong-params.md )
694
695
- [ Test If An Instance Variable Was Assigned] ( rails/test-if-an-instance-variable-was-assigned.md )
695
696
- [ Truncate Almost All Tables] ( rails/truncate-almost-all-tables.md )
Original file line number Diff line number Diff line change
1
+ # Specify New Attributes For #find_or_create_by
2
+
3
+ The ActiveRecord
4
+ [ ` #find_or_create_by ` ] ( https://apidock.com/rails/v4.0.2/ActiveRecord/Relation/find_or_create_by )
5
+ method is a handy way to get an object that represents a record. It will
6
+ attempt to look up that record, usually based on a unique value or set of
7
+ values. If it can find one, then that's the record you get. If nothing is
8
+ found, then it will create a new record.
9
+
10
+ New records tend to need more data than just the unique lookup attribute. There
11
+ are a couple ways these other attributes can be specified.
12
+
13
+ The first is by giving ` #find_or_create_by ` a block.
14
+
15
+ ``` ruby
16
+ User .find_or_create_by(email: " some@email.com" ) do |new_user |
17
+ new_user.admin = false
18
+ new_user.password = params[:password ]
19
+ new_user.password_confirm = params[:password_confirm ]
20
+ end
21
+ ```
22
+
23
+ Another approach is to precede the ` #find_or_create_by ` call with a
24
+ [ ` #create_with ` ] ( https://apidock.com/rails/ActiveRecord/QueryMethods/create_with )
25
+ call.
26
+
27
+
28
+ ``` ruby
29
+ User .create_with(
30
+ admin: false ,
31
+ password: params[:password ],
32
+ password_confirm: params[:password_confirm ]
33
+ ).find_or_create_by(email: " some@email.com" )
34
+ ```
35
+
36
+ In both cases, the extra attributes will not be applied to the ` User ` record in
37
+ the case of a _ find_ ; they are only used in the case of a _ create_ .
You can’t perform that action at this time.
0 commit comments