Мое приложение управляет описаниями бизнес-правил на нескольких языках.Чтобы отобразить индекс бизнес-правил (имя и описание), мне нужно присоединить модель BusinessRule к модели перевода.Модель перевода полиморфна:
Table name: translations
id :integer not null, primary key
document_type :string
document_id :bigint(8)
field_name :string(30) not null
language :string(2) not null
translation :text
searchable :tsvector
created_at :datetime not null
updated_at :datetime not null
Чтобы упростить задачу, я определил псевдонимы отношений с бизнес-правилами в business_rule.rb модели:
has_many :name_translations, -> { where("field_name='name'") }, class_name: 'Translation', as: :document
has_many :description_translations, -> { where("field_name='description'") }, class_name: 'Translation', as: :document
Чтобы построить индекс, мне нужно оставить внешнее объединение бизнес-правил с соответственно name_translations и description_translations для языка текущего пользователя, который становится в SQL:
select BR.code, TR1.translation as name, TR2.translation as description
from dqm_app.business_rules BR
left outer join dqm_app.translations TR1 on (TR1.document_id = BR.id and TR1.field_name='name' and TR1.language='en')
left outer join dqm_app.translations TR2 on (TR2.document_id = BR.id and TR2.field_name='description' and TR2.language='en')
, который я пытаюсь преобразовать как (при условии, что язык пользователяанглийский):
@business_rules = BusinessRule.left_outer_joins(:name_translations, :description_translations).
where(:name_translations.language = 'en' and description_translations.language = 'en')
Это вызывает 2 проблемы:
1 - ActiveRecord :: StatementInvalid (PG :: AmbiguousColumn: ERROR: ссылка на столбец «field_name» является неоднозначной) [конечно, он появляется дважды в запросе ]
2 - условие , где неверно, и я не знаю, как его построить.
Вы можете мне помочь?
Спасибо большое!