Самостоятельное соединение в таблице с ActiveRecord

У меня есть ActiveRecord с именем Name , который содержит имена на различных языках

class Name < ActiveRecord::Base
  belongs_to :language

class Language < ActiveRecord::Base
  has_many :names

Найти имена на одном языке достаточно просто:

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, который совпадает с чем-либо.

Для бонусных баллов замените n1.normalized = n2 .normalized с n1.normalized LIKE n2.normalized , поскольку поле может содержать подстановочные знаки SQL.

Я также открыт для идей о моделировании данных по-разному, но я бы предпочел по возможности избегайте отдельных таблиц для каждого языка.

6
задан lambshaanxy 4 September 2010 в 11:15
поделиться