Как сделать запрос с полиморфными ассоциациями и графами? - PullRequest
0 голосов
/ 12 апреля 2019

Настройка

У меня есть ненаправленный полный граф, представленный классами ниже.

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

...