2010-02-04 48 views
5

假設一個User有很多Document s,並且他們目前正在使用Document。我如何在rails中表示這個?Rails:has_many,但也有一個不同的名字

我想說current_user.current_document = Document.first(有或沒有current_在文件前面)並且它不會更改current_user.documents集合。

這是我有:

class Document < ActiveRecord::Base 
    belongs_to :user 
end 

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

的問題是,當我說current_user.document = some_document,它會刪除以前存儲在current_user.documentcurrent_user.documents文檔。這是有道理的,因爲Documenthas_one關係,但不是我想要的。我如何解決它?

回答

8

你需要改變你的模型來

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 

附:但要小心循環保存。如果您創建一個新用戶(並且不保存它)並設置current_document,然後保存該用戶,則可能會出現堆棧溢出或其他瘋狂錯誤。

+1

謝謝!爲了讓其他人清楚起見,本例中的列名將在'users'表中的'current_document_id'中。 – Peter 2010-02-04 11:29:09

相關問題