【发布时间】:2017-06-19 22:03:08
【问题描述】:
我编写了一个服务模块,它发出一个 API 请求,返回带有错误的字符串或带有参数的散列,并将其包含在控制器中。
def create
@new_params = ApiRequest.create_login(params, customer_secret) #this returns either a string or hash
request_error? #if it's a string, it should immediately render :new
params[:login] = @new_params #substitutes the params from the form with the API response
@login = current_user.logins.new(login_params).save
end
这是在不尝试保存的情况下重定向的方式
def request_error?
respond_to do |format|
if @new_params.is_a? String
@error = @new_params
format.html { render :new, notice: @error }
end
end
end
问题是,在控制台中它说它rendered :new(甚至redirected_to new_login_path - 如果我使用它而不是渲染)但页面甚至没有重新加载,只是没有任何反应。即使它应该早先使用 render :new 退出创建操作,它仍然会尝试保存 @login 并失败。
我的猜测是长 API 请求会中断操作(整个控制器操作 > 300 毫秒)。我应该怎么做才能解决这个问题?
【问题讨论】:
标签: ruby-on-rails performance api controller request