在轨道上的红宝石上交替订单查询

时间:2017-04-03 13:10:56

标签: sql ruby-on-rails ruby database sql-order-by

我有这个代码来询问患者:

Patients.order(params[:sort])

如何实现这一点,以便每次执行此查询时结果都是交替顺序,因此:(升序 - >降序 - >升序 - > ......)?

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

2 个答案:

答案 0 :(得分:2)

要实现这一点,你应该把钥匙存放在任何地方,对吗?将其存储在数据库中并不是一个好主意,因为对于每个页面加载,它会额外增加+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'

答案 1 :(得分:-1)

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

#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)

然后,在您的视图中,每次加载视图时,订单都会更改。

注意:这不是实现这一目标的最佳方式,但对于我认为有新手的人来说,这是最简单的方法。