Объедините полиморфные области с или - PullRequest
0 голосов
/ 07 ноября 2018

Как можно объединить две области, чтобы получить их результаты в одном запросе, когда они являются полиморфными ассоциациями? У меня есть эти модели:

class Vendor < ApplicationRecord
  has_many :shipping_method_registers, as: :shipper
  has_many :shipping_methods, through: :shipping_method_registers
end

class City < ApplicationRecord
  has_many :shipping_method_registers, as: :shipper
  has_many :shipping_methods, through: :shipping_method_registers
end

class ShippingMethodRegister < ApplicationRecord
  belongs_to :shipping_method
  belongs_to :shipper, polymorphic: true
end

class ShippingMethod < ApplicationRecord
  has_many :shipping_method_registers, dependent: :destroy, autosave: true
  has_many :city_zones, through: :shipping_method_registers, source: :shipper,
                        source_type: "City"
  has_many :vendors, through: :shipping_method_registers, source: :shipper,
                     source_type: "Vendor"
end

Я хочу, чтобы методы доставки поставщика и города были объединены, но только с разными результатами. Я попробовал это с

> vendor.shipping_methods.or(city.shipping_methods)
ArgumentError: Relation passed to #or must be structurally compatible. Incompatible values: [:joins]
from /usr/local/bundle/gems/activerecord-5.2.0/lib/active_record/relation/query_methods.rb:634:in `or!'

А также с

> vendor.shipping_methods.merge(city.shipping_methods)

Но это только возвращает способы доставки по городу. Я мог бы объединить их в Ruby, но я бы хотел сделать это одним запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...