2012-03-10 77 views
0

在我的控制,我有: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"後進行排序。

+1

什麼問題?你想忽略'params [:sort]',除非它是這三個值之一? – 2012-03-10 21:26:57

+0

是的,情況就是這樣。 – 2012-03-10 21:27:31

回答

1

首先,.order("#{@sort} DESC")並不是一個好主意,當@sort是從params中直接採取。最好使用.order('? DESC', @sort)

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

我不知道如果我正確地讀你的問題,但我假設你想created_at是默認順序與其它有效的選項是ratingsrating

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