2010-02-04 21 views
5

User'un birçok Document s olduğunu ve şu anda üzerinde çalıştıkları tek bir Document olduğunu varsayalım. Bunu raylarda nasıl temsil edebilirim?Raylar: has_many, ama aynı zamanda farklı bir ad ile has_one

(belgenin önünde ya da yokken) ve current_user.documents koleksiyonunu değiştirmemeyi söylemek istiyorum.

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

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

Sorun current_user.document = some_document derken, daha önce current_user.documents den current_user.document saklanan belgeyi kaldırır olmasıdır:

Bu aldığım şeydir. Bu, Document'un sahip olduğu has_one ilişkisinden dolayı anlamlıdır, ancak istediğim şey bu değil. Nasıl düzeltebilirim?

cevap

8

Sen

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. için Modeller değiştirmeniz gerekir Ama döngüsel tasarruflardan sakının. Yeni bir Kullanıcı oluşturup (henüz kaydetme) ve current_document'u ayarladıysanız ve Kullanıcıyı kaydederseniz yığın taşması veya başka bir çılgın hata olabilir.

+1

Teşekkürler! Ve sadece diğerleri için açık olmak gerekirse, bu durumda sütun adı "users' tablosunda current_document_id" olacaktır. – Peter

İlgili konular