В моем приложении Rails я хочу проверить параметры filter
и post_type
.Validate params in Rails
Оба варианта являются необязательными, но если они присутствуют, они должны иметь значение и должны иметь значение, соответствующее одному в массиве допустимых значений.
В моем контроллере у меня есть два метода для их проверок:
def validate_filter
if params.has_key?(:filter)
if params[:filter].present?
if ['popular', 'following', 'picks', 'promoted', 'first-posts'].include?(params[:filter])
return true
else
return false
end
else
return false
end
else
return true
end
end
def validate_post_type
if params.has_key?(:post_type)
if params[:post_type].present?
if ['discussions', 'snaps', 'code', 'links'].include?(params[:post_type])
return true
else
return false
end
else
return false
end
else
return true
end
end
И тогда в моем основном контроллере методе я:
def index
raise ActionController::RoutingError.new('Not Found') unless validate_filter && validate_post_type
...
Таким образом, это означает, что post_type=
и post_type=cam
будут возвращать 404, но post_type=snaps
вернет true.
Есть ли лучший способ проверить, что переданные параметры действительны, но для обоих пустых и если сам ключ существует. В этом сценарии недостаточно всего blank?
и present?
.
Если ваше приложение использует RestAPI попробуйте использовать [JSON-схемы] (https://github.com/ruby-json-schema/json-schema) вместо валидатора для такого случая. –