Rails用户参数只允许某些特定属性

时间:2012-03-10 21:10:38

标签: ruby-on-rails ruby ruby-on-rails-3

在我的控制器中我有:

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"后排序。

1 个答案:

答案 0 :(得分:1)

首先,当.order("#{@sort} DESC")直接来自params时,@sort不是一个好主意。最好使用.order('? DESC', @sort)

http://guides.rubyonrails.org/security.html#sql-injection

我不确定我是否正确阅读了您的问题,但我假设您希望created_at成为默认订单,其他有效选项为ratingsrating。< / 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)