首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对仍应用第一排序的记录进行排序和重新排序

对仍应用第一排序的记录进行排序和重新排序
EN

Stack Overflow用户
提问于 2016-07-29 23:58:39
回答 1查看 63关注 0票数 1

我有一个显示服务列表的视图。在此视图中有排序功能,例如顶部的按钮,可以单击这些按钮以仅显示符合该选项的记录。例如,单击approved将仅显示已批准的服务。我也有表列,可以点击进行排序。因此,例如,您可以单击date created,该表将按日期升序或降序显示记录。

代码语言:javascript
复制
def index

  @my_campaigns = Campaign.active.where(:operator_id => current_user.operator_id).joins(:partner).where("partners.deleted_at IS ?", nil).where("partners.parent_id NOT IN (?) OR partners.parent_id is null", @sla_test_ids)

  @campaigns = @my_campaigns

  if params[:search_link]
    @campaigns = @campaigns.where(:status => params[:search_link])
  end

  if params[:search]
    @campaigns = @campaigns.where("campaigns.name ILIKE ? OR partners.company_name ILIKE ?",  "%#{params[:search]}%", "%#{params[:search]}%" )
  end

  if params[:sort]
    @campaigns = @campaigns.order(sort_column + " " + sort_direction)
  else
    @campaigns = @campaigns
  end

  if params[:page] == "all"
    @campaigns = @campaigns.order('campaigns.id DESC').page(1).per(@campaigns.count) # you can alhardcod' it
  else
    @campaigns = @campaigns.order('campaigns.id DESC' ).page(params[:page]||1)
  end

end

我的问题是,如果我选择了已批准的按钮,并且只显示已批准的记录,如果我按日期排序,它将重新查询数据库,并返回所有记录,而不仅仅是已批准的记录。

有人能告诉我如何将新参数与已应用于视图的参数组合在一起吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-30 02:47:40

ActiveRecord关系是可链接的,因此您可以一个接一个地链接所有条件。例如:

代码语言:javascript
复制
@campaigns = @my_campaigns

if params[:search_link]
  @campaigns = @campaigns.includes(:partner).where(status: params[:search_link])
end

if params[:sort]
  @campaigns = @campaigns.order(sort_column + " " + sort_direction)
end

它很便宜,因为它只是查询构造。只有在视图中使用@campaigns时,才会执行整个查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38663023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档