Merge ActiveRecord_Relation

In model Banner

belongs_to :segment
belongs_to :basic_component
has_many :state_banners, dependent: :destroy
has_many :states, through: :state_banners

scope :banner_have_zero_cities, lambda { includes(state_banners: :state_banner_cities).where(state_banner_cities: {state_banner_id: nil}) }
scope :banner_by_state, lambda { |state_id| where("state_banners.state_id = ?", state_id) }
scope :banner_by_city, lambda { |city_id| joins(state_banners: :state_banner_cities).where("state_banner_cities.city_id = ?", city_id) }

In controller

def scoped_collection
   @banners_cities = Banner.banner_by_city(city_id)
   @banners_states =Banner.banner_by_state(city.state_id).banner_have_zero_cities
   @banners = @banners_cities.concat(@banners_states)
   return @banners.joins(:basic_component)
 end

@banners_states.size => 1

@banners_cities.size => 2

@banners_states.merge(@banners_cities) SQL (0.2ms) SELECT DISTINCT banners.id FROM banners INNER JOIN state_banners ON state_banners.banner_id = banners.id INNER JOIN state_banner_cities ON state_banner_cities.state_banner_id = state_banners.id WHERE (state_banners.state_id = 3) AND state_banner_cities.state_banner_id IS NULL AND (state_banner_cities.city_id = '260') LIMIT 25 OFFSET 0 => []

I need 3

i try concat

@banners = @banners_cities.concat(@banners_states) @banners.size => 3

but

@banners.joins(:basic_component).order("basic_component.order asc").size => 2

CACHE (0.0ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM banners INNER JOIN state_banners ON state_banners.banner_id = banners.id INNER JOIN state_banner_cities ON state_banner_cities.state_banner_id = state_banners.id INNER JOIN basic_components ON basic_components.id = banners.basic_component_id WHERE (state_banner_cities.city_id = '260') LIMIT 25 OFFSET 0) subquery_for_count

:(, help

Upvotes: 0

Views: 156

Answers (1)

Eric
Eric

Reputation: 380

Your post is kind of hard to follow, but try .limit(3) at the end of the query?

Upvotes: 0

Related Questions