Вы правы, что здесь используется неправильная ассоциация.
В ActiveRecord они моделируют, что имеет внешний ключ, всегда belongs_to
другая модель.
В этом сценарии класс Foo на самом деле belongs_to
эти реквизиты
Один из способов указать это будет:
class Foo < ActiveRecord::Base
belongs_to :prop_a, :class_name => "Bar", :foreign_key => "prop_a_id"
belongs_to :prop_b, :class_name => "Bar", :foreign_key => "prob_b_id"
belongs_to :prop_c, :class_name => "Bar", :foreign_key => "prob_c_id"
end
Однако это означает, что в Foo должен быть столбец с заголовком "prop_a_id, prop_b_id
и prop_c_id
", в котором можно хранить целое число, являющееся первичным ключом таблицы Bar.
Это решение, однако, не решает проблему, указанную под ассоциациями ActiveRecord. Для решения, предложенного выше, вам нужно будет взглянуть на Rails и Single Table Inheritance. Если вы гуглите это, вы можете найти много ресурсов на нем. Лично я рекомендую Agile Web Development с Rails. В 3-м издании вы можете найти его на странице 377. Также здесь есть хорошая статья для начинающих по STI здесь
Удачи!