关系问题

时间:2011-06-20 10:54:02

标签: mysql ruby-on-rails migration

嘿,我对现有依赖模型的扩展有问题。好吧,根据 模型之间如下: 我有一个用户模型:

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。有没有更好的方法解决问题

1 个答案:

答案 0 :(得分:1)

我建议您在当前的方案中将UserTranslations视为翻译的STI所以 -

class UserTranslation < Translation
  belongs_to :user
end

这样,所有用户翻译的单词都将保存在“翻译”表中,但类型为“user_translations”。然后,您可以默认情况下将ID设为未批准,并构建管理员端批准功能。

这样,@ word.translation将产生翻译或user_translation对象。