3

如果我在 Grape API 请求上设置参数验证,是否可以获得仅验证参数的哈希?

desc "My Grape API request handler"
params do
  requires :name
  optional :description
end
post do
   puts params.inspect # has all the params passed to request, 
                       # even params not defined in validation block
end

有没有另一种方法可以params限制在参数验证块中列出的那些?有点像 Rails strong_parameters 的工作方式。

4

3 回答 3

4

可能会很晚,但对于任何路过的人,您可以使用declared_params. https://github.com/ruby-grape/grape#declared

于 2015-10-07T17:28:32.790 回答
2

从 Rack::Utils.parse_nested_query 开始可能更容易

例如:

params = Rack::Utils.parse_nested_query(env['QUERY_STRING'])
于 2014-05-27T19:09:44.530 回答
2

假设您正在使用导轨...

您可以在 api 的基类中创建一个强大的参数助手,以便您安装的端点也可以拥有这个助手:

module StrongParamHelpers
  def strong_params
    ActionController::Parameters.new(params)
  end
end

将其包含在您的 api 的基类中:

helpers StrongParamHelpers

然后在每个 api 端点类中,创建另一个类似于 rails 的辅助方法:

helpers do
  def user_params
    strong_params.require(:user).permit(:username, :email) # etc...
  end
end

然后只需调用user_params您的路线:

desc "My Grape API request handler"
params do
  requires :user do
    optional :username
    optional :email
    # etc
  end
end
post do
   User.create user_params
end

希望有帮助。

于 2014-04-22T23:28:07.527 回答