2012-03-05 74 views
1

我有一個適用於多種語言的字典數據庫。該結構是這樣的:定期從列表中檢索列:通過導軌中的表

表:English_words

  • ID
  • wordtype
  • 語法

表:Spanish_words (同爲英語)

表:French_words (相同英語)

表:English_Spanish

  • english_id
  • spanish_id
  • weight_english
  • weight_spanish
  • use_english_if
  • use_spanish_if

最後四列用於幫助我的程序確定在特定情況下,哪些翻譯可能最適合。我的英文模式包含

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

爲了獲得可能的西班牙語翻譯的優先順序。另外,我以後需要根據使用_.._ if列中的規則做一些更復雜的過濾。所以,無論何時我寫「this_word.es_words」來檢索英文單詞的西班牙語翻譯,我都希望我的結果對象還包含來自連接表的使用_.._ if列。我無法想象在沒有這些列的情況下只需要翻譯,所以我想在模型層面而不是控制器中解決這個問題。什麼是最好的方式來做到這一點?

(我沒有在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連接並直接與直通表交談:thisword.english_spanish.first.use_english_if。經常使用太麻煩,所以我想擴展has_many或者創建自己的函數,這樣就無需與english_spanish表交談。 – Sprachprofi 2012-03-08 14:48:02