Пользовательские параметры Rails допускают только некоторые определенные атрибуты - PullRequest
0 голосов
/ 11 марта 2012

В моем контроллере у меня есть:

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 Ответ

1 голос
/ 11 марта 2012

Во-первых, .order("#{@sort} DESC") не очень хорошая идея, когда @sort берется прямо из параметров.Было бы лучше использовать .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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...