Имам 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 заместващи знаци.
Също така съм отворен към идеи за моделиране на данните по различен начин, но бих предпочел да избягвам отделни таблици за всеки език, ако мога.