在模型横幅中
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) }
在控制器中
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 D11。D12=D13。D14 WHERE (state_banners.state_id = 3) AND D15。D16为NULL且(state_banner_cities.city_id = '260') LIMIT 25 OFFSET 0 => []
我需要3个
我尝试concat
@banners = @banners_cities.concat(@banners_states) @banners.size => 3
但
@banners.joins(:basic_component).order("basic_component.order asc").size => 2
缓存(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
=D26.D27 INNER JOIN D29上的D28。D30=D31.D32 WHERE (state_banner_cities.city_id = '260') LIMIT 25 OFFSET 0) subquery_for_count
:(,帮助
发布于 2016-10-15 05:28:31
你的帖子有点难以理解,但在查询的末尾试试.limit(3)
?
https://stackoverflow.com/questions/40051837
复制相似问题