繁体   English   中英

在Rails上查询交替的订单

[英]Query with alternating orders on ruby on rails

我有以下代码可查询患者:

Patients.order(params[:sort])

我如何实现此功能,以便每次执行此查询时,结果都将以交替顺序排列:(升序->降序->升序-> ...)?

该代码在Ruby on Rails应用程序的Controller上实现。

要实现这一点,您应该将密钥存储在任何地方,对吗? 将其存储在数据库中并不是一个好主意,因为它是每个页面加载的+1额外select和+1额外update查询。 如果我们将其存储在服务器上的任何位置(例如,在Redis ,它将对所有用户都是全局的,或者我们将必须存储与用户数量一样多的密钥。 那么为什么不将其存储在用户方面呢? 我认为最好的方法是将其存储在cookies并在每次查询后反转键。 或在会话中。

sort_order = cookies[:sort_order] || 'asc'

Patients.order("#{params[:sort]} #{sort_order}")

cookies[:inverted_sort_order] = sort_order == 'asc' ? 'desc' : 'asc'

您可以使用类变量来实现此行为,该变量在您每次执行控制器中的特定操作时都会增加

#In your controller
@@hit_number ||= 0                  #This will set your hit_number the first time
@@hit_number = @@hit_number + 1     #Increment your hit_number

if (@@hit_number%2) == 0            #Switch for :asc or :desc 
  @my_order = :asc
else
  @my_order = :desc
end

@patients = Patients.order(name: @my_order)

然后,在您的视图中,顺序将在每次加载视图时发生变化。

注意:这不是实现此目标的最佳方法,但对我来说,这是新手最简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM