Мне трудно использовать полиморфные ассоциации в объединенной таблице, где один вариант может привести к ассоциации двух экземпляров одной и той же таблицы.Я относительно новичок в программировании, поэтому я надеюсь, что мой вопрос имеет смысл.
По сути, у меня есть 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 (который в настоящее время получает пустой массив)
ЛюбойПонять, что я делаю неправильно или как я могу сделать этот код СУХИМ?Я чувствую, что что-то упустил.
Спасибо за чтение!