我在不同的控制器中有多个动作,通过法拉第使用application_helper中定义的辅助函数进行第三方API调用。
现在,如果响应成功,它们会有不同的渲染视图,但需要发送json,如果有任何错误,则会收到。 直接在动作中使用以下代码
if (r[:error] && r[:code]==403)
Rails.logger.info "Exiting"
render :json => body and return
end
但是如果我将它移动到辅助函数并从动作中调用辅助函数,则执行不会停在那里并一直持续到动作结束时它会引发DoubleRendererError。
可以做任何事情来让控制器停止处理并从帮助器返回自己(以避免在我进行第三方API调用的每个操作中放置这4行)
答案 0 :(得分:1)
def blank_fields?(params)
if params["user"]["email"].blank? || params["user"]["password"].blank? || params["user"]["password_confirmation"].blank?
render json: { status: 422, message: "Your email, password or password confimation is blank. Please check that all fields are filled in and try again!" }, status: 422
return true # pass back to guard clause
end
end
做这样的事情,并从你的控制器方法中调用这个方法,也就是:
return if blank_fields?(params)
答案 1 :(得分:0)
滑轨'帮助程序用于从视图进行调用,并且它们使用render
的方式是从控制器调用的。您可以从控制器内调用帮助程序,但通常不需要。如果您希望某些功能可供所有控制器使用,您通常会将它放在ApplicationController中。
当您在视图中调用渲染时,它将尝试渲染您调用它的模板中的部分。