2012-07-06 9 views
5

El comportamiento predeterminado para Ruby on Rails es guardar los cambios realizados a las asociaciones de recolección. ¿Hay alguna forma de cambiar este comportamiento, de modo que pueda modificar las colecciones en la memoria sin los cambios que se escriben en la base de datos.desactivación de ahorro automático a través de la asociación has_many - Desconexión entidad ActiveRecord de la sesión

lo que si tengo dos clases:

class Project < ActiveRecord::Base 
    has_many :tasks 

class Task < ActiveRecord::Base 
    belongs_to :project 

y escribir un código como:

Project.tasks.clear 
Project.tasks << task1 
Project.tasks << task2 

entonces se elimina automáticamente todas las tareas asociadas con el Proyecto y automáticamente escribe los cambios a la db.

Este es un ejemplo artificial de lo que estoy tratando de lograr. Sé que podría utilizar Project.tasks.build() para añadir una nueva tarea a la colección sin que se guarda automáticamente, pero las tareas que estoy añadiendo no son nuevos tasks.They son enlaces a un conjunto limitado de tareas definido en db. Podría pensar en ellos como entradas en una enumeración de tareas. Además Project.tasks.clear golpea inmediatamente el db.

En el mundo Java, usando Hibernate, me desconectaría la entidad de la sesión y ser capaz de modificar la entidad en la memoria hasta volver a conectar y el ahorro.

Gracias

+0

Esto parece ser un problema similar a mi pregunta: http://stackoverflow.com/questions/11353582/delete-associated-records-when-model-is-saved – iblue

+0

¿No viola RoR: has_many logic? –

Respuesta

2

¿Ha intentado utilizar el atributo task_ids en su lugar?

cambiar el código para:

Project.tasks_ids = [] 
Project.tasks_ids << task1.id 
Project.tasks_ids << task2.id 

Sé que esta pregunta es un poco viejo, pero desde que traté de buscar un problema similar en Google pensé que esto podría ser útil para otras personas.

Cuestiones relacionadas