Nameさまざまな名前を含むActiveRecord という名前がありますLanguages。
class Name < ActiveRecord::Base
belongs_to :language
class Language < ActiveRecord::Base
has_many :names
1 つの言語で名前を見つけるのは簡単です。
Language.find(1).names.find(whatever)
しかし、言語 1 と言語 2 の両方が同じ名前を持つ一致するペアを見つける必要があります。SQL では、これは単純な自己結合を呼び出します。
SELECT n1.id,n2.id FROM names AS n1, names AS n2
WHERE n1.language_id=1 AND n2.language_id=2
AND n1.normalized=n2.normalized AND n1.id != n2.id;
ActiveRecord でこのようなクエリを実行するにはどうすればよいですか? たまたま何かと一致する言語 1 の名前のリストだけでなく、名前のペア (= 一致の両側) を見つける必要があることに注意してください。
ボーナス ポイントについては、フィールドに SQL ワイルドカードが含まれている可能性があるためn1.normalized=n2.normalized、に置き換えます。n1.normalized LIKE n2.normalized
また、データを別の方法でモデル化するというアイデアにもオープンですが、できれば言語ごとに別々のテーブルを用意することは避けたいと思っています。