0

次のスキーマがあります (* は主キーを意味します):

languages
  id*
  english_name
  native_name

native_to_target_language
  native_language_id*
  target_language_id*
  target_language_name
  overview_text

(target_language_name は、母国語で書かれたターゲット言語の名前です)。

native_language_id と target_language_id の値を指定して、native_to_target_language テーブルから target_language_name の値を取得したいと考えています。

これを取得するための最良の方法は何ですか? http://compositekeys.rubyforge.org/の複合主キーを使用しますか? 生の SQL クエリを使用しない標準的な方法はありますか?

4

3 に答える 3

2

CRUD操作が必要かどうかはあまり明確ではありません。あなたが見つけたいなら、あなたは以下をすることができます:

NativeToTargetLanguage.find(:all, :conditions => {
        :native_language_id => native_language_id,
        :target_language_id => target_language_id }
)
于 2010-03-02T17:54:25.130 に答える
1

独自の翻訳システムを展開する代わりに、「既製品」の種類を調査しましたか?

たとえば、これの多くを行うGlobalizeがあります。

テーブル内のあるレコードから別のレコードへの接続を表す複合キーを持つテーブルを持つことは、非常に面倒です。一般に、A<->B アソシエーションは、A->B と B->A の種類のペアとして維持する必要があります。

一般的な例として、これはどうでしょうか。

class Language < ActiveRecord::Base
  belongs_to :phrase
  has_many :translations,
    :through => :phrase
end

class Phrase < ActiveRecord::Base
  has_many :translations
end

class Translation < ActiveRecord::Base
  belongs_to :language
  belongs_to :phrase
end

この場合、Phrase は翻訳対象の用語を表す一種のレコードです。状況に応じて、「フランス語」または「英語」または「ここをクリック」を表すことができます。

この構造を使用すると、定義した言語で言語を説明する適切な用語を簡単に見つけることができます。

たとえば、おおよそ次のとおりです。

<%= link_to(Language.find_by_code('fr').phrase.translation.find_by_language_id(session_language_id), '/fr') %>
于 2010-03-02T19:03:58.253 に答える
0

ポリモーフィックアソシエーションのようなものが必要なようです。これには、言語ごとに個別のテーブルが必要になります。これは、(私が思うに)あなたが話していることです。

ただし、問題に対するより良い解決策があるようです。特に、これを解決するためのより良いスキーマを思い付くことができるかもしれません(データベースがすでに使用されていて、それにアクセスしようとするRailsアプリを作成している場合を除く)。

解決しようとしている全体的な問題について説明してください。

于 2010-03-02T17:52:03.373 に答える