我很难在联合表中使用多态关联,其中一个选项可能导致同一表的两个实例的关联。我是编程的新手,所以希望我的问题有意义。
基本上,我有3个模型,我的目标是在不同产品之间建立关联:
集成表将链接2个产品或1个产品和1个ExternalProduct
这是我的迁移文件:
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查询所有Integrations的方式。就目前而言,我必须构建一个自定义方法:
def all_integrations
Integration.where(main_product_id: id).or(Integration.where(integratable_type: 'Product', integratable_id: id))
end
我希望能够执行以下操作:@ product.integrations(当前检索一个空数组)
关于我做错了什么或如何使此代码变为DRY的任何线索?我觉得我缺少什么。
感谢阅读!