Rails的用户PARAMS只允许某些特定属性
问题描述:
在我的控制,我有:Rails的用户PARAMS只允许某些特定属性
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"
后进行排序。
答
首先,.order("#{@sort} DESC")
并不是一个好主意,当@sort
是从params中直接采取。最好使用.order('? DESC', @sort)
。
http://guides.rubyonrails.org/security.html#sql-injection
我不知道如果我正确地读你的问题,但我假设你想created_at
是默认顺序与其它有效的选项是ratings
和rating
。
@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)
什么问题?你想忽略'params [:sort]',除非它是这三个值之一? – 2012-03-10 21:26:57
是的,情况就是这样。 – 2012-03-10 21:27:31