症状
RailsAPIモードで、条件でrenderするものを変えるアクションを作成時に、以下のエラーが発生しました。 翻訳すると、「このアクションでは、レンダリングおよび/またはリダイレクトが複数回呼び出されました。ご注意ください」error
AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action. Please note that you
may only call render OR redirect, and at most once per action.
Also note that neither redirect nor render terminate execution
of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".):
//全文翻訳
AbstractController :: DoubleRenderError(このアクションでは、レンダリングまたはリダイレクト、あるいはその両方が複数回呼び出されました。
レンダリングまたはリダイレクトのみを呼び出すことができ、アクションごとに最大1回呼び出すことができます。
また、リダイレクトもレンダリングも実行を終了しないことに注意してください
したがって、リダイレクト後にアクションを終了する場合は、「redirect_to(...)andreturn」のような操作を行う必要があります。):
以下が該当のコードです。(すごい簡略化しました)
HogeController.rb
def update_hoge
user = User.find_by(id: params[:user_id])
if(user.update!(
hoge: params[:hoge],
))
render json: {user: user}, status: :ok
else
render json: {}, status: :unauthorized
end
render json: {user:user}, status: :ok
end
解決策
if分の後にもrenderがあったため、2重でrenderにかエラーが発生していたようです。 最後のrenderを消すことで解決しました。HogeController.rb
def update_hoge
user = User.find_by(id: params[:user_id])
if(user.update!(
hoge: params[:hoge],
))
render json: {user: user}, status: :ok
else
render json: {}, status: :unauthorized
end
end