我有以下架构(*表示主键):
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查询的标准方法?
答案 0 :(得分:2)
如果您需要CRUD操作,则不太清楚。如果您想找到,那么您可以执行以下操作:
NativeToTargetLanguage.find(:all, :conditions => {
:native_language_id => native_language_id,
:target_language_id => target_language_id }
)
答案 1 :(得分: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') %>
答案 2 :(得分:0)
听起来你可能想要像Polymorphic Associations这样的东西。这需要每种语言单独使用一个表,这是(我认为)你正在讨论的内容。
但是,似乎可能有更好的解决方案来解决您的问题。特别是,您可能能够提出更好的模式来解决这个问题(除非数据库已经在使用,并且您正在创建一个Rails应用程序以尝试访问它)。
您能描述一下您试图解决的整体问题吗?