-
Notifications
You must be signed in to change notification settings - Fork 21.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Raise RecordNotDestroyed
when children can't be replaced
#13042
Merged
rafaelfranca
merged 2 commits into
rails:master
from
brianstorti:fix-dependent-destroy-12812
Nov 26, 2013
Merged
Raise RecordNotDestroyed
when children can't be replaced
#13042
rafaelfranca
merged 2 commits into
rails:master
from
brianstorti:fix-dependent-destroy-12812
Nov 26, 2013
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fixes #12812 Raise `ActiveRecord::RecordNotDestroyed` when a child marked with `dependent: destroy` can't be destroyed. The following code: ```ruby class Post < ActiveRecord::Base has_many :comments, dependent: :destroy end class Comment < ActiveRecord::Base before_destroy do return false end end post = Post.create!(comments: [Comment.create!]) post.comments = [Comment.create!] ```` would result in a `post` with two `comments`. With this commit, the same code would raise a `RecordNotDestroyed` exception, keeping the `post` with the same `comment`.
@@ -1042,4 +1042,10 @@ | |||
|
|||
*Slava Markevich* | |||
|
|||
* Raise `ActiveRecord::RecordNotDestroyed` when a replaced child marked with `dependent: destroy` fails to be destroyed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please move the CHANGELOG entry to the top
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moved.
I don't think I can backport this one, but I'll gladly include this on 4.1 |
👍 |
rafaelfranca
added a commit
that referenced
this pull request
Nov 26, 2013
Raise `RecordNotDestroyed` when children can't be replaced
naiyt
added a commit
to naiyt/rails
that referenced
this pull request
Apr 15, 2015
This is a proposal for a possibly better solution to commit rails#13042. Currently, Rails will raise ActiveRecord::RecordNotDestroyed if you call destroy on a model, but that model has children with dependent: :destroy set, and those models fail to be destroyed. This causes issues if you need to perform some action in the parent's before_destroy regardless of whether the children fail to be destroyed. This switches back to calling destroy instead of destroy! on the children. The original issue (rails#12812) is resolved in this commit by only raising an ActiveRecord::RecordNotSaved exception when you are replacing a dependent: :destroy child, and not when calling destroy on the parent.
naiyt
added a commit
to naiyt/rails
that referenced
this pull request
Apr 15, 2015
This is a proposal for a possibly better solution to commit rails#13042. Currently, Rails will raise ActiveRecord::RecordNotDestroyed if you call destroy on a model, but that model has children with dependent: :destroy set, and those models fail to be destroyed. This causes issues if you need to perform some action in the parent's before_destroy regardless of whether the children fail to be destroyed. This switches back to calling destroy instead of destroy! on the children. The original issue (rails#12812) is resolved in this commit by only raising an ActiveRecord::RecordNotSaved exception when you are replacing a dependent: :destroy child, and not when calling destroy on the parent.
naiyt
added a commit
to naiyt/rails
that referenced
this pull request
Mar 1, 2016
This is a proposal for a possibly better solution to commit rails#13042. Currently, Rails will raise ActiveRecord::RecordNotDestroyed if you call destroy on a model, but that model has children with dependent: :destroy set, and those models fail to be destroyed. This causes issues if you need to perform some action in the parent's before_destroy regardless of whether the children fail to be destroyed. This switches back to calling destroy instead of destroy! on the children. The original issue (rails#12812) is resolved in this commit by only raising an ActiveRecord::RecordNotSaved exception when you are replacing a dependent: :destroy child, and not when calling destroy on the parent.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #12812.
Raise
ActiveRecord::RecordNotDestroyed
when a child marked withdependent: destroy
can't be destroyed.The following code:
would result in a
post
with twocomments
.With this change, the same code would raise a
RecordNotDestroyed
exception, keeping thepost
with the samecomment
.