У меня есть ActiveRecord с именем Name
, который содержит имена в различных Languages
.
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.
Я также открыт для идей о моделировании данных по-разному, но я бы предпочел избегать отдельных таблиц для каждого языка, если это возможно.