2012-03-05 7 views
1

私は多くの言語で動作する辞書データベースを持っています。から定期的に列を取得:

表:English_words

  • ID
  • ワード
  • wordtype
  • 文法

表:Spanish_words (英語の場合と同じ)

構造は次のようです

表:French_words (英語の場合と同じ)

表:English_Spanish

  • をenglish_idは
01 use_spanish_if
  • use_english_if
  • weight_spanish
  • weight_english
  • をspanish_id

    最後の4つの列は、私のプログラムが多くの翻訳のうち特定の文脈に最も適しているものを決定するのを助けるためのものです。私の英語のモデルは、優先順に可能なスペイン語の翻訳を得るために

    has_many :es_words, :through => :english_spanish, :order => 'weight_english ASC' 
    

    が含まれています。さらに、私は後で列のuse _.._ ifの規則に基づいて、さらに複雑なフィルタリングを行う必要があります。ですから、英語の単語のスペイン語の翻訳を検索するために "this_word.es_words"を書くたびに、結果のオブジェクトに、結合テーブルの列である_.._が含まれているようにしたいと思います。これらの列のない翻訳だけが必要なことは想像もできませんので、コントローラではなくモデルレベルでこれを解決したいと思います。それを行う最善の方法は何ですか?

    (私はSpanish_words表にuse_ifを持っていない理由は、私は複数の言語を翻訳してるということで、条件は私が/から翻訳していますどのような言語によって異なります)

  • 答えて

    0

    eager loading of associationsを参照してください( 「インクルード」メソッド)。

    +0

    詳細を教えてください。私は "EnglishWord.includes(:use_english_if).first"を試してみたところ、エラーが出ます。 "thisword.es_words.includes(:use_english_if).first"とそのバリエーションと同じです。 use_english_ifカラムにアクセスできる唯一の方法は、私のhas_many:es_words接続を無視し、throughテーブルと直接話すことです:thisword.english_spanish.first.use_english_if。頻繁に使用するのは面倒ですので、has_manyを拡張するか、english_spanishテーブルと話す必要がなくなる独自の関数を作成します。 – Sprachprofi

    関連する問題