Ruby on Rails - Полиморфные ассоциации + таблица соединений + ссылка на одну и ту же модель дважды? - PullRequest
0 голосов
/ 01 октября 2018

Мне трудно использовать полиморфные ассоциации в объединенной таблице, где один вариант может привести к ассоциации двух экземпляров одной и той же таблицы.Я относительно новичок в программировании, поэтому я надеюсь, что мой вопрос имеет смысл.

По сути, у меня есть 3 модели, в которых моя цель - создать ассоциации между различными продуктами:

  • Продукт
  • ExtrenalProduct
  • Интеграция (полиморфная) / таблица соединений

Таблица интеграции свяжет 2 продукта или 1 продукт и 1 внешний продукт

Вот мой файл миграции :

class CreateIntegrations < ActiveRecord::Migration[5.1]
  def change
    create_table :integrations do |t|
      t.references :main_product
      t.belongs_to :integratable, polymorphic: true
      t.timestamps
    end
    add_index :integrations, [:integratable_id, :integratable_type]
    add_foreign_key :integrations, :products, column: :main_product_id, primary_key: :id
  end
end

Вот моя Интеграционная модель :

class Integration < ApplicationRecord
  belongs_to :integratable, polymorphic: true
  belongs_to :main_product, class_name: 'Product'
end

Вот моя Модель внешнего продукта :

class ExternalProduct < ApplicationRecord
    has_many :integrations, as: :integratable
end

Вот моя Модель продукта :

has_many :integrations, class_name: 'Integration', foreign_key: 'main_product_id', dependent: :destroy
has_many :integrations, as: :integratable

Мой вопрос касается того, как я могу запросить все Интеграции из @product.На данный момент мне нужно создать собственный метод:

def all_integrations
    Integration.where(main_product_id: id).or(Integration.where(integratable_type: 'Product', integratable_id: id))
end

Я бы хотел иметь возможность: @ product.integrations (который в настоящее время получает пустой массив)

ЛюбойПонять, что я делаю неправильно или как я могу сделать этот код СУХИМ?Я чувствую, что что-то упустил.

Спасибо за чтение!

...