在我的控制器中我有:
if params[:sort].nil?
@sort = "created_at"
else
@sort = params[:sort]
end
@konkurrencer = Konkurrencer.where("id NOT IN(?)", @clicked).order("#{@sort} DESC")
我想添加如果params[:sort]
与"created_at"
,"ratings"
或"rating"
不同,那么它应该在"created_at"
后排序。
答案 0 :(得分:1)
首先,当.order("#{@sort} DESC")
直接来自params时,@sort
不是一个好主意。最好使用.order('? DESC', @sort)
。
http://guides.rubyonrails.org/security.html#sql-injection
我不确定我是否正确阅读了您的问题,但我假设您希望created_at
成为默认订单,其他有效选项为ratings
和rating
。< / p>
@order = case params[:sort]
when 'ratings'
'ratings DESC'
when 'rating'
'rating DESC'
else # anything else
'created_at DESC'
end
@konkurrencer = Konkurrencer.where("id NOT IN(?)", @clicked).order(@order)