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

在这种情况下,短语是一种表示要翻译的术语的记录。根据具体情况,它可以表示“法语”或“英语”或“单击此处”。

使用这种结构,很容易找到合适的术语来用您定义的任何语言来描述一种语言。

例如,大致:

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

听起来您可能想要像Polymorphic Associations这样的东西。这将需要每种语言都有一个单独的表格,这就是(我认为)您正在讨论的内容。

但是,您的问题似乎有更好的解决方案。特别是,您可能能够想出一个更好的模式来解决这个问题(除非数据库已经在使用中并且您正在创建一个 Rails 应用程序来尝试访问它)。

你能描述一下你试图解决的总体问题吗?

于 2010-03-02T17:52:03.373 回答