mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Document identity map inconsistency with associations, closes #474.
This commit is contained in:
@@ -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 incosistency is meant to be fixed in future Rails releases.
|
||||
#
|
||||
module IdentityMap
|
||||
|
||||
|
||||
Reference in New Issue
Block a user