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