has_many через полиморфный с псевдонимом с обеих сторон - PullRequest
0 голосов
/ 07 февраля 2019

У меня проблема с объединением двух моделей в n..n ассоциации.

У меня есть следующие ассоциации в контексте:

  • Предложение n..n Продукт
  • Предложение n..n Project
  • Предложение n..n NewProject

И аналогично этому у меня есть:

  • Order n..n Продукт
  • Заказ n..n Проект
  • Заказ n..n NewProject

Итак, модель соединения имеет одинаковые атрибуты в обоих случаях,но частичное для каждого из них отличается.

Есть ли способ создать единую модель соединения (Item), в которой будут храниться все данные, но которая будет использоваться с тремя разными псевдонимами в Order and Proposal?

Я пытался кодироватьэто так, но не сработало ..

offer.rb

    class Proposal < ActiveRecord::Base
      ...
      has_many :items
      has_many :products, through: :items, source: :requisition, source_type: "Produto"
      has_many :projects, through: :items, source: :requisition, source_type: "Projeto"
      has_many :projects, through: :items, source: :requisition, source_type: "Novo"
      ...
    end

order.rb

    class Order < ActiveRecord::Base
      ...
      has_many :items, as: :requisition, dependent: :destroy
      has_many :products, through: :items, source: :requisition, source_type: "Produtos"
      has_many :projects, through: :items, source: :requisition, source_type: "Projetos"
      has_many :projects, through: :items, source: :requisition, source_type: "Novos"
      ...
    end

product.rb

    class Product < ActiveRecord::Base
      has_many :items, as: :piece, dependent: :destroy
      has_many :orders, through: :items, source: :piece, source_type: 'Order'
      has_many :proposals, through: :items, source: :piece, source_type: 'Proposal'
      ...
    end

project.rb

    class Project < ActiveRecord::Base
      has_many :items, as: :piece, dependent: :destroy
      has_many :orders, through: :items, source: :piece, source_type: 'Order'
      has_many :proposals, through: :items, source: :piece, source_type: 'Proposal'
      ...
    end

item.rb

    class Item < ApplicationRecord
      belongs_to :piece, polymorphic: true
      belongs_to :requisition, polymorphic: true
      ...
    end

Я ожидаю объединить эти ассоциации, очистить некоторые таблицы и попытаться ускорить приложение.

...