我有这个代码来询问患者:
Patients.order(params[:sort])
如何实现这一点,以便每次执行此查询时结果都是交替顺序,因此:(升序 - >降序 - >升序 - > ......)?
此代码在Ruby on Rails应用程序的Controller上实现。
答案 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)
然后,在您的视图中,每次加载视图时,订单都会更改。
注意:这不是实现这一目标的最佳方式,但对于我认为有新手的人来说,这是最简单的方法。