我们是否需要检查 Rails get 请求中是否缺少参数?



我正在开发一个 Rails + React Web 应用程序。并且有一个 GET 请求需要一个参数trainee_id

我的问题是:

是否需要添加params.require(:trainee_id)和相对异常处理程序来验证参数是否存在?

路线获取/结果/学员/:trainee_id/发布

def get_trainee_published_result
result = Result.find_by(user_id: params[:trainee_id])
...
do stuff
...
end

我不检查就使用此参数感到不舒服。但是,如果缺少参数,则路由将无效,甚至不会触发此get_trainee_published_result操作。

如果我在代码中包含params.require(:trainee_id),Rspec 测试也会有一些问题。当缺少参数时,我无法测试这种情况(let(:p arams) { { trainee_id: nil } } ),因为没有路由与此请求匹配。

你是对的,如果单个定义的路由是调用控制器操作的唯一方式,那么trainee_id参数将始终存在。如果要验证这一点,可以编写一个路由规范,以验证GET /results/trainees/:trainee_id/published调用给定参数的操作:

expect(get: '/results/trainees/123/published')
.to route_to(controller: 'trainees', action: 'published', trainee_id: '123')

至于您的操作本身,我会考虑通过params.fetch(:trainee_id)访问它来表示您希望trainee_id始终存在。如果出于任何原因,trainee_idparams中不可用,这将引发ActionController::ParameterMissing错误,并且其余操作将无法完成。

如果需要,可以在控制器规范中检查以下内容:

it 'throws an error when :trainee_id is missing' do
expect { get :published, params: { }) }.to raise_error(ActionController::ParameterMissing)
end

相关内容

  • 没有找到相关文章

最新更新