我正在学习红宝石并从事某些工作。我有controller.rb
def city
params.require(:id)
begin
@data = @user.city_details(Integer(params[:id]),
params[:city_name]
rescue ArgumentError => e
render_error(:bad_request, e.message)
end
end
model.rb
def city_details(id, city_name = 'philly')
StoredProcedure::User::GetCityDetails.exec!(
id,
city_name
)
end
end
如何更新控制器以捕获与参数转换相关的错误,而不是任何与模型相关的错误?
答案 0 :(得分:0)
我会在模型方法之前抛出参数,以确保您捕获正确的东西:
id = begin
Integer(params[:id])
rescue ArgumentError => e
render_error(:bad_request, e.message)
end
@data = @user.city_details(id)
您还可以在控制器的顶层添加救援
class MyController
rescue_from ArgumentError do
// code here
end
def mymethod
id = Integer(params[:id])
end
end
答案 1 :(得分:0)
id = Integer(params[:id]) rescue render_error(:bad_request, 'Invalid id')