2010-02-04 9 views
5

Digamos que User tiene muchas Document s, y una sola Document en la que están trabajando actualmente. ¿Cómo represento esto en los rieles?Rails: has_many, pero también has_one con un nombre diferente

Quiero decir current_user.current_document = Document.first (con o sin current_ en frente del documento) y no cambiar la colección current_user.documents.

Esto es lo que tengo:

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :documents 
    has_one :document 
end 

el problema es que cuando digo current_user.document = some_document, se elimina el documento guardado previamente en current_user.document de current_user.documents. Esto tiene sentido debido a la relación has_one que Document tiene, pero no es lo que quiero. ¿Cómo lo arreglo?

Respuesta

8

necesita cambiar sus modelos de

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :documents 

    # you could also use :document, but I would recommend this: 
    belongs_to :current_document, :class_name => "Document" 
end 

P. S. Pero ten cuidado con las guardias cíclicas. Si crea un nuevo usuario (y no lo guarda aún) y establece current_document y luego guarda el usuario, es posible que obtenga desbordamientos de pila u otros errores graves.

+1

Gracias! Y para que quede claro para otros, el nombre de la columna en este caso será 'current_document_id' en la tabla' users'. – Peter

Cuestiones relacionadas