Combine polymorphic scopes with or
up vote
1
down vote
favorite
How can I combine two scopes to get both results of them in one query, when they are polymorphic associations? I have this models:
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
I want to get the shipping methods of a vendor AND a city combined, but only distinct results. I tried it with
> 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!'
And also with
> vendor.shipping_methods.merge(city.shipping_methods)
But this only returns the shipping methods of the city. I could merge them in Ruby, but I'd like to do it in one query.
mysql ruby-on-rails activerecord polymorphism
add a comment |
up vote
1
down vote
favorite
How can I combine two scopes to get both results of them in one query, when they are polymorphic associations? I have this models:
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
I want to get the shipping methods of a vendor AND a city combined, but only distinct results. I tried it with
> 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!'
And also with
> vendor.shipping_methods.merge(city.shipping_methods)
But this only returns the shipping methods of the city. I could merge them in Ruby, but I'd like to do it in one query.
mysql ruby-on-rails activerecord polymorphism
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
How can I combine two scopes to get both results of them in one query, when they are polymorphic associations? I have this models:
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
I want to get the shipping methods of a vendor AND a city combined, but only distinct results. I tried it with
> 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!'
And also with
> vendor.shipping_methods.merge(city.shipping_methods)
But this only returns the shipping methods of the city. I could merge them in Ruby, but I'd like to do it in one query.
mysql ruby-on-rails activerecord polymorphism
How can I combine two scopes to get both results of them in one query, when they are polymorphic associations? I have this models:
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
I want to get the shipping methods of a vendor AND a city combined, but only distinct results. I tried it with
> 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!'
And also with
> vendor.shipping_methods.merge(city.shipping_methods)
But this only returns the shipping methods of the city. I could merge them in Ruby, but I'd like to do it in one query.
mysql ruby-on-rails activerecord polymorphism
mysql ruby-on-rails activerecord polymorphism
asked Nov 7 at 8:40
23tux
6,345757131
6,345757131
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53185938%2fcombine-polymorphic-scopes-with-or%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown