¿Alguien sabe los problemas clave que tiene la característica Rails 3.1 IdentityMap que ha forzado a la característica a deshabilitarse por defecto? Estoy seguro de que hay problemas específicos menores, pero ¿hay algún problema importante que alguien deba tener en cuenta antes de habilitarlo para una aplicación Rails 3.1 ya construida?Rails 3.1 ¿Problemas con el mapa de identidad?
Respuesta
Cuando mira the documentation, el problema principal que se plantea es que los objetos administrados en el Mapa de identidad no pueden manejar asociaciones todavía, por lo que no está listo para el uso del mundo real en este momento.
La documentación indica claramente que la característica aún está en desarrollo, por lo que nadie debería estar realmente usándola en la naturaleza.
IdentityMap se eliminó en Rails 4, por lo que es posible que necesitemos utilizar este enlace https: // github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/identity_map.rb –
Desde el comments in the code:
# 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 accidently removed.
#
# This inconsistency is meant to be fixed in future Rails releases.
Dos problemas menores, que me cuenta son:
Si la herencia de los modelos, y que desea cambiar de un typo del objeto a otro, a continuación, primero necesita eliminar su objeto del mapa de identidad y luego crear un nuevo objeto. Ejemplo:
class A < ActiveRecord::Base end class B < ActiveRecord::Base end a = A.create! a.update_attribute :type, 'B' b = B.find a.id #=> #<A:...> ActiveRecord::IdentityMap.remove(a) if ActiveRecord::IdentityMap.enabled? b = B.find a.id #=> #<B:...>
Otro pequeño problema es que el mapa de identidad puede Mees la hora de las pruebas. Como no trunca su repositorio después de cada prueba. Para hacerlo, uno necesita agregar eso a las configuraciones de la plataforma de prueba. Rspec ejemplo:
RSpec.configure do |config| config.after :each do DatabaseCleaner.clean ActiveRecord::IdentityMap.clear end end
Mi opinión es que la aplicación identidad puede ser utilizado, pero parcialmente. Es una mala idea habilitarlo por defecto para cada objeto individual, pero será una buena idea habilitarlo para modelos específicos. Digamos que tiene una tabla de idiomas, que es bastante información estática, o puede por países. ¿Por qué no cargarlos todos en el mapa de identidad? Pero, con datos dinámicos (como usuarios, o algo diferente, que cambia constantemente), no hay necesidad de almacenar eso en la memoria.
Pero, ¿cómo activar el mapa de identidad para un solo modelo? – rafamvc
- 1. Correlación de RestKit con Rails 3.1
- 2. Testing Rails 3.1 motor montable con Rspec
- 3. Capistrano para Rails 3.1
- 4. Instalación de Rails 3.1
- 5. Uso de Rails 3.1 con DataTables
- 6. Authlogic Rails 3.1
- 7. Rails 3.1 Ransack HABTM
- 8. Rails 3.1 - CSRF ignorado?
- 9. Rails 3.1 Rutas API
- 10. Rails 3.1 Mongoid has_secure_password
- 11. Sprites in Rails 3.1
- 12. Rails 3.1 - Desarrollo con motores montables
- 13. Rails 3.1 anidamiento profundo con RABL
- 14. Rails 3.1 Activos en ActionMailer con image_tag
- 15. Activos del motor con Rails 3.1
- 16. Rails 3.1 include_root_in_json
- 17. Controladores de plantilla Rails 3.1
- 18. Actualización de Rails 3 a Rails 3.1
- 19. Rails 3.1 activos no resuelven el problema
- 20. Tutorial de implementación de aplicaciones Rails 3.1
- 21. Heroku, Rails 3.1 y Dalli
- 22. Contraseña generada aleatoriamente Rails 3.1
- 23. Rails 3.1- error gema therubyracer
- 24. Rails 3.1 Asset StyleSheet sorting
- 25. Favicon with Rails 3.1 no aparece?
- 26. blueprint css rails 3.1 ayuda
- 27. Google Charts in Rails 3.1 Ajax Parcial
- 28. Rails 3.1, Error de niña de fábrica
- 29. nombre de host SSL específico en Heroku con Rails 3.1
- 30. Rails 3 ¿Problemas con la ruta raíz?
Solo FYI, [IdentityMap se ha eliminado] (https://github.com/rails/rails/pull/5261) – Zabba