2011-06-20 119 views
2

嘿我有一個問題,現有的依賴模型的擴展。那麼,根據模型之間 如下: 我有一個用戶模式:問題與關係

class User <ActiveRecord::Base 
has_many :words, :through => :memo_words 
has_many :memo_words, :dependent => :destroy 
end 

class MemoWord 
    belongs_to :user 
    belongs_to :word 
end 

class Word 
    has_many :translations, :dependent => :destroy 
    has_many :memo_words, :dependent => :destroy 
end 

class Translation 
    belongs_to :word 
end 

現在這是一個圖: http://img221.imageshack.us/img221/4232/przedik.png

字模型代表一個字,一個語言和模型代表單詞翻譯的翻譯。我想解決表中和Word中的記錄時,沒有記錄翻譯(單詞沒有翻譯)。我想允許用戶添加他們自己的翻譯,但通過添加本地(每個用戶)完成翻譯。由於翻譯和用戶之間缺乏關係,用戶無法添加單詞。我質疑是否有一個好的解決方案是添加模型UserTranslation:

UserTranslation class 
    belongs_to :word 
    belongs_to :user 
end 

圖和改變後的情況。 http://img851.imageshack.us/img851/7269/75031527.png

這將有與翻譯模型相同的功能。在實踐中,我必須通過僅添加'belongs_to:user'將模型複製到UserTranslation Translation。是否有解決問題的更好的方法

+0

這是一對一對多的關係嗎?這正是我想我正在閱讀的內容。 – jaydel

回答

1

我建議,在當前的方案考慮UserTranslations是STI的翻譯等等 -

class UserTranslation < Translation 
    belongs_to :user 
end 

這樣,所有用戶轉換的話會被保存裏面的「翻譯」表但類型爲「user_translations」。然後,您可以使id默認爲未批准,並建立管理員審批功能。

這樣,@ word.translation將產生翻譯或user_translation對象。

+0

這種方法將需要爲表'翻譯'添加字段'user_id'。如果我們有一張包含大量記錄(翻譯)的表格並不能更好地爲「每個用戶」的相對較少量的翻譯創建單獨的表格。另外,'翻譯'中的絕大多數記錄是不必要的字段'user_id'。 –