2010-02-04 12 views
5

Supponiamo che uno User abbia molti Document s e un singolo Document al momento su cui stanno lavorando. Come posso rappresentarlo nei binari?Rails: has_many, ma anche has_one con un nome diverso

Voglio dire current_user.current_document = Document.first (con o senza current_ davanti al documento) e non modificare la raccolta current_user.documents.

Questo è quello che ho:

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

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

il problema è che quando dico current_user.document = some_document, rimuove il documento precedentemente memorizzata in current_user.document da current_user.documents. Questo ha senso a causa della relazione has_one che ha Document, ma non è quello che voglio. Come lo aggiusto?

risposta

8

è necessario cambiare i vostri modelli di

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. Ma attenzione ai salvataggi ciclici. Se si crea un nuovo utente (e non lo si salva ancora) e si imposta current_document e quindi si salva l'utente, è possibile che si verifichino overflow dello stack o altri errori pazzi.

+1

Grazie! E per essere chiari per gli altri, il nome della colonna in questo caso sarà 'current_document_id' nella tabella' users'. – Peter

Problemi correlati