ruby on rails 4 activerecord - 组合和唯一连接查询优化
ruby on rails 4 activerecord - combine and unique joins query optimization
我想弄清楚这个 activerecord 查询是好的还是应该对此进行更好的优化?
我需要合并 3 个查询并确保结果是唯一的。我正在使用 .uniq
ads1 = Advertisement.where(city: property.city, state: property.state, country_id: property.address_country_id)
ads2 = Advertisement.where(city: nil, state: property.state, country_id: property.address_country_id)
ads3 = Advertisement.where(city: nil, state: nil, country_id: property.address_country_id)
combine_ads = ads1 + ads2 + ads3
uniq_ads = combine_ads.uniq { |ads| ads.id}
uniq_ads = uniq_ads.sort_by { |ads| ads.created_at}
final_ads = uniq_ads.paginate(:page => params[:page], :per_page => params[:page_limit])
status 200
present final_ads, with: Api::Presenters::AdvertisementDetail
我在 rails 4
上使用 ruby
gem 'rails', '4.2.4'
你能回顾一下上面的 activerecords 组合唯一连接,如果它好或者有更好的优化方法可以提供反馈吗?
您应该将 combine_ads
更改为:
combine_ads = Advertisement.where(city: [property.city, nil],
state: [property.state, nil],
country_id: property.address_country_id)
.order('created_at asc')
上面唯一的额外情况是,它还会有那些行,其中 city
是 property.city
,但 state
是 nil
,您的细分没有t 轨道。
您也不需要 uniq_ads
,我们已经用 created_at
订购了。
我想弄清楚这个 activerecord 查询是好的还是应该对此进行更好的优化?
我需要合并 3 个查询并确保结果是唯一的。我正在使用 .uniq
ads1 = Advertisement.where(city: property.city, state: property.state, country_id: property.address_country_id)
ads2 = Advertisement.where(city: nil, state: property.state, country_id: property.address_country_id)
ads3 = Advertisement.where(city: nil, state: nil, country_id: property.address_country_id)
combine_ads = ads1 + ads2 + ads3
uniq_ads = combine_ads.uniq { |ads| ads.id}
uniq_ads = uniq_ads.sort_by { |ads| ads.created_at}
final_ads = uniq_ads.paginate(:page => params[:page], :per_page => params[:page_limit])
status 200
present final_ads, with: Api::Presenters::AdvertisementDetail
我在 rails 4
上使用 rubygem 'rails', '4.2.4'
你能回顾一下上面的 activerecords 组合唯一连接,如果它好或者有更好的优化方法可以提供反馈吗?
您应该将 combine_ads
更改为:
combine_ads = Advertisement.where(city: [property.city, nil],
state: [property.state, nil],
country_id: property.address_country_id)
.order('created_at asc')
上面唯一的额外情况是,它还会有那些行,其中 city
是 property.city
,但 state
是 nil
,您的细分没有t 轨道。
您也不需要 uniq_ads
,我们已经用 created_at
订购了。