Настройка
У меня есть ненаправленный полный граф, представленный классами ниже.
class Node # (id, name, groupable_type, groupable_id)
belongs_to :groupable, polymorphic: true
end
class Foo # (id, val1)
has_many :nodes, as: groupable
end
class Bar # (id, val2)
has_many :nodes, as: groupable
end
class Edge # (id, node_a_name, node_b_name, weight)
belongs_to :node_a, class_name: 'Node', primary_key: 'name', foreign_key: 'node_a_name'
belongs_to :node_b, class_name: 'Node', primary_key: 'name', foreign_key: 'node_b_name'
end
Возможно, что имя узла может быть повторено, чтобы иметь любое количество соединений Foos, Bars или Foos and Bars.
Моя цель :
С учетом параметров контроллера:
{node_a: {foo: {value: "x"}}, node_b: {bar: {value: 294}}}
Я хочу иметь возможность написать один запрос, используя ORM, который даст мне ребро, соответствующее узлам, чтобы я мог получить вес ребра. Я также думал, что мне понадобится дополнительный выбор.
Что я пробовал:
- Использование
preload
с where
, но вы получите полиморфную ошибку eager-load.
- Настройка ассоциаций с помощью ассоциаций узлов Edge.
Окружающая среда
Rails 4.1.8 на Ruby 2.1.5 (устаревшее приложение)
Postgres DB