Как проверить, существуют ли параметры в рельсах - PullRequest
172 голосов
/ 12 апреля 2011

Я использую оператор IF в Ruby on Rails, чтобы попытаться проверить, установлены ли параметры запроса.Независимо от того, установлены оба параметра или нет, первая часть следующего, если блок срабатывает.Как я могу заставить эту часть запускаться ТОЛЬКО, если установлены оба параметра [: one] и params [: two]?

if (defined? params[:one]) && (defined? params[:two])
 ... do something ...
elsif (defined? params[:one])
 ... do something ...
end

Ответы [ 14 ]

1 голос
/ 03 марта 2016

Вот что я делаю,

before_action :validate_presence

, а затем следующие методы:

    def check_presence
  params[:param1].present? && params[:param2].present?
 end

 def validate_presence
  if !check_presence
    render json:  {
                      error:  {
                                message: "Bad Request, parameters missing.",
                                status: 500
                              }
                    }
  end
 end
1 голос
/ 04 сентября 2014

Просто собрал это вместе для той же проблемы:

before_filter :validate_params

private

def validate_params
  return head :bad_request unless params_present?
end

def params_present?  
  Set.new(%w(one two three)) <= (Set.new(params.keys)) &&
  params.values.all?
end

первая строка проверяет, присутствуют ли наши целевые ключи в ключах параметров, используя подмножество <=? оператор. Enumerable.all? без блока по умолчанию возвращает false, если любое значение равно nil или false. </p>

0 голосов
/ 04 декабря 2013

Я пытаюсь ответить поздно, но из дальнего обзора:

Если вы хотите узнать, установлены ли значения в (любом) хэше, все вышеприведенные ответы верны, в зависимости от их точки зрения.

Если вы хотите проверить свои параметры (GET / POST ..), вам следует использовать что-то более особенное, чем ожидаемое значение params[:one], что-то вроде

if params[:one]~=/   / and  params[:two]~=/[a-z]xy/

игнорирование параметра (GET / POST), как будто они там, где они не установлены, если они не соответствуют ожидаемым

просто if params[:one] с или без определения nil / true, - это один из шагов, чтобы открыть страницу для взлома, потому что,обычно следующим шагом является использование что-то вроде select ... where params[:one] ..., если это предусмотрено или нет, активным или внутри или после структуры.

ответ или просто подсказка

0 голосов
/ 12 апреля 2011
if params[:one] && param[:two]
  ... excute code ..
end

Вы также можете проверить, являются ли параметры пустыми, используя params [: two] .empty

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...