我有一个显示服务列表的视图。在此视图中有排序功能,例如顶部的按钮,可以单击这些按钮以仅显示符合该选项的记录。例如,单击approved将仅显示已批准的服务。我也有表列,可以点击进行排序。因此,例如,您可以单击date created,该表将按日期升序或降序显示记录。
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我的问题是,如果我选择了已批准的按钮,并且只显示已批准的记录,如果我按日期排序,它将重新查询数据库,并返回所有记录,而不仅仅是已批准的记录。
有人能告诉我如何将新参数与已应用于视图的参数组合在一起吗?
发布于 2016-07-30 02:47:40
ActiveRecord关系是可链接的,因此您可以一个接一个地链接所有条件。例如:
@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时,才会执行整个查询。
https://stackoverflow.com/questions/38663023
复制相似问题