Ruby 如何在rescue中捕获参数转换并不捕获模型错误

Ruby 如何在rescue中捕获参数转换并不捕获模型错误,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我有如下controller.rb def lesson params.require(:lesson_id) begin @result = @user.lesson_details(Integer(params[:lesson_id]), params[:lesson_name] head :ok rescue ArgumentError => e render_error(:bad_req

我有如下controller.rb

def lesson
  params.require(:lesson_id)
  begin
    @result = @user.lesson_details(Integer(params[:lesson_id]),
                              params[:lesson_name]
    head :ok
  rescue ArgumentError => e
    render_error(:bad_request, e.message)
  end
end
我正在使用邮递员“测试”进行测试
如何在rescue中包装参数lesson_id的转换,以便不捕获任何基础模型的错误?

一个选项是将其包装在if中:

def lesson
  if params[:lesson_id] && params[:lesson_name]
    @result = @user.lesson_details(params[:lesson_id]),
                                   params[:lesson_name]
    head :ok
  else
    render_error :bad_request, 'Your message here'
  end
end

一个选项是将其包装在if中:

def lesson
  if params[:lesson_id] && params[:lesson_name]
    @result = @user.lesson_details(params[:lesson_id]),
                                   params[:lesson_name]
    head :ok
  else
    render_error :bad_request, 'Your message here'
  end
end

你可以在@result上拯救nil

def lesson
  @result = @user.lesson_details(params[:lesson_id]), params[:lesson_name] rescue nil 
  if @result 
    head :ok
  else
    render_error :bad_request, 'Your message here'
  end
end
或者你可以使用援救条款而不出错

def lesson
  params.require(:lesson_id)
  begin
    @result = @user.lesson_details(Integer(params[:lesson_id]),
                              params[:lesson_name]
    head :ok
  rescue => e
    render_error(:bad_request, e.message)
  end
end

你可以在@result上拯救nil

def lesson
  @result = @user.lesson_details(params[:lesson_id]), params[:lesson_name] rescue nil 
  if @result 
    head :ok
  else
    render_error :bad_request, 'Your message here'
  end
end
或者你可以使用援救条款而不出错

def lesson
  params.require(:lesson_id)
  begin
    @result = @user.lesson_details(Integer(params[:lesson_id]),
                              params[:lesson_name]
    head :ok
  rescue => e
    render_error(:bad_request, e.message)
  end
end

谢谢你,派克。我正在和邮递员一起测试,当我尝试您的id值abc或nil的解决方案时,我得到了参数错误,我已经将其更改为要求名称。请重试。相同错误:参数数目错误(给定1,预期为0)如何调用函数?调用postman'Thank Pachonk。我正在和邮递员一起测试,当我尝试您的id值abc或nil的解决方案时,我得到了参数错误,我已经将其更改为要求名称。请重试。相同错误:参数数目错误(给定1,预期为0)如何调用该函数?调用postman'谢谢。请您在第二个解决方案中解释一下,为什么要删除此错误?这是否意味着错误只来自模型,而不能发生在控制器中?因为如果我用say lesson_id=abc进行测试,我会得到相同的错误(integer()abc的无效值),无论controllerThanks中是否有ArgumentError。请您在第二个解决方案中解释一下,为什么要删除此错误?这是否意味着错误只来自模型,而不能发生在控制器中?因为如果我用say lesson_id=abc进行测试,我会得到相同的错误(integer()abc的无效值),无论控制器中是否有ArgumentError