File tree Expand file tree Collapse file tree 4 files changed +16
-1
lines changed Expand file tree Collapse file tree 4 files changed +16
-1
lines changed Original file line number Diff line number Diff line change
1
+ * Fixed error where .persisted? throws SystemStackError for an unsaved model with a
2
+ custom primary key that didn't save due to validation error.
3
+
4
+ Fixes #14393 .
5
+
6
+ * Chris Finne*
7
+
1
8
* Introduce ` validate ` as an alias for ` valid? ` .
2
9
3
10
This is more intuitive when you want to run validations but don't care about the return value.
Original file line number Diff line number Diff line change @@ -369,7 +369,7 @@ def restore_transaction_record_state(force = false) #:nodoc:
369
369
@new_record = restore_state [ :new_record ]
370
370
@destroyed = restore_state [ :destroyed ]
371
371
if restore_state . has_key? ( :id )
372
- self . id = restore_state [ :id ]
372
+ write_attribute ( self . class . primary_key , restore_state [ :id ] )
373
373
else
374
374
@attributes . delete ( self . class . primary_key )
375
375
@attributes_cache . delete ( self . class . primary_key )
Original file line number Diff line number Diff line change 5
5
require 'models/book'
6
6
require 'models/author'
7
7
require 'models/post'
8
+ require 'models/movie'
8
9
9
10
class TransactionTest < ActiveRecord ::TestCase
10
11
self . use_transactional_fixtures = false
@@ -14,6 +15,11 @@ def setup
14
15
@first , @second = Topic . find ( 1 , 2 ) . sort_by { |t | t . id }
15
16
end
16
17
18
+ def test_persisted_in_a_model_with_custom_primary_key_after_failed_save
19
+ movie = Movie . create
20
+ assert !movie . persisted?
21
+ end
22
+
17
23
def test_raise_after_destroy
18
24
assert_not @first . frozen?
19
25
Original file line number Diff line number Diff line change 1
1
class Movie < ActiveRecord ::Base
2
2
self . primary_key = "movieid"
3
+
4
+ validates_presence_of :name
3
5
end
You can’t perform that action at this time.
0 commit comments