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