2012-03-10 3 views
0

Dans mon contrôleur j'ai:Rails seulement params utilisateur permet certains certains attributs

if params[:sort].nil? 
    @sort = "created_at" 
else 
    @sort = params[:sort] 
end 
@konkurrencer = Konkurrencer.where("id NOT IN(?)", @clicked).order("#{@sort} DESC") 

Je tiens à ajouter si params[:sort] est différent de "created_at", "ratings" ou "rating" il doit trier après "created_at".

+1

Quelle est la question? Vous voulez ignorer 'params [: sort]' sauf si c'est l'une de ces trois valeurs? –

+0

oui c'est le cas. –

Répondre

1

Tout d'abord, .order("#{@sort} DESC") n'est pas une bonne idée lorsque @sort provient directement de params. Il serait préférable d'utiliser .order('? DESC', @sort).

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

Je ne sais pas si je lis bien votre question, mais je suppose que vous voulez created_at être à l'ordre par défaut avec les autres options valides étant ratings et 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) 
Questions connexes