Ruby on Rails-多态关联+联合表+两次引用同一模型?

时间:2018-10-01 09:51:06

标签: ruby-on-rails rails-activerecord polymorphic-associations

我很难在联合表中使用多态关联,其中一个选项可能导致同一表的两个实例的关联。我是编程的新手,所以希望我的问题有意义。

基本上,我有3个模型,我的目标是在不同产品之间建立关联:

  • 产品
  • ExtrenalProduct
  • 集成(多态)/联合表

集成表将链接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的任何线索?我觉得我缺少什么。

感谢阅读!

0 个答案:

没有答案