2011-06-20 47 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'。 –