-
Notifications
You must be signed in to change notification settings - Fork 21.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Document identity map inconsistency with associations, closes #474.
- Loading branch information
Showing
1 changed file
with
28 additions
and
1 deletion.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,7 +12,34 @@ module ActiveRecord | |
# In order to enable IdentityMap, set <tt>config.active_record.identity_map = true</tt> | ||
# in your <tt>config/application.rb</tt> file. | ||
# | ||
# IdentityMap is disabled by default. | ||
# IdentityMap is disabled by default and still in development (i.e. use it with care). | ||
# | ||
# == Associations | ||
# | ||
# Active Record Identity Map does not track associations yet. For example: | ||
# | ||
# comment = @post.comments.first | ||
# comment.post = nil | ||
# @post.comments.include?(comment) #=> true | ||
# | ||
# Ideally, the example above would return false, removing the comment object from the | ||
# post association when the association is nullified. This may cause side effects, as | ||
# in the situation below, if Identity Map is enabled: | ||
# | ||
# Post.has_many :comments, :dependent => :destroy | ||
# | ||
# comment = @post.comments.first | ||
# comment.post = nil | ||
# comment.save | ||
# Post.destroy(@post.id) | ||
# | ||
# Without using Identity Map, the code above will destroy the @post object leaving | ||
# the comment object intact. However, once we enable Identity Map, the post loaded | ||
# by Post.destroy is exactly the same object as the object @post. As the object @post | ||
# still has the comment object in @post.comments, once Identity Map is enabled, the | ||
# comment object will be acciddently removed. | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
pokka
|
||
# | ||
# This incosistency is meant to be fixed in future Rails releases. | ||
# | ||
module IdentityMap | ||
|
||
|
Why is it wrong to remove the comment object when the association to comments has dependent: :destroy on it? Wouldn't that be what one would expect? Not sure why that is a problem...