2011-06-20 11 views
2

ちょっと、私は既存の依存関係モデルの拡張に問題があります。次のようにしているだけでなく、モデル間の に従って: 私はUserモデルを持っている:関係の問題

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のモデルは、1つの言語の単語を表し、モデルを表し、個々の単語の翻訳を翻訳する。私は状況を解決したいときは、テーブルとWordのレコードは、レコードの翻訳はありません(単語は翻訳されていません)。ユーザーが自分の翻訳を追加できるようにしたいが、翻訳はローカル(ユーザーごと)を追加して行う。翻訳とユーザーとの間には関係がないため、ユーザーは単語を追加することはできません。変更後の状況に

UserTranslation class 
    belongs_to :word 
    belongs_to :user 
end 

と図:そして、私は良い解決策は、モデルUserTranslationを追加するかどうかを疑問視。 http://img851.imageshack.us/img851/7269/75031527.png

翻訳のモデルと同じ機能を持つでしょう。実際には、モデルを 'belongs_to:user'だけを追加してUserTranslation Translationにコピーする必要があります。この問題に対するより良いアプローチはあります

+0

これは一対多の関係ですか?それは私が読んでいると思うものです。 – jaydel

答えて

1
私はあなたの現在のスキームでそう翻訳のためにSTIをするUserTranslationsを検討することを示唆している

-

class UserTranslation < Translation 
    belongs_to :user 
end 

すべてのユーザー訳語は「翻訳」テーブル内に保存されます。この方法タイプは "user_translations"です。次に、デフォルトでIDを非承認に​​し、管理者側の承認機能を構築することができます。

このように、@ word.translationは、translationまたはuser_translationオブジェクトを生成します。

+0

このアプローチでは、テーブル 'translations'に 'user_id'フィールドを追加する必要があります。たくさんのレコード(翻訳)を持つテーブルがある場合は、比較的少量の「ユーザーごとの」翻訳のために別のテーブルを作成する方が良いわけではありません。さらに、 'translations'のレコードの大部分は不要なフィールド 'user_id'です。 –