Rails でアクションの再利用してたら render :hoge and return で DoubleRenderError に足つっこんだ。

Rails でアクションの再利用してたら render :hoge and return で DoubleRenderError に足つっこんだ。

任意の view を描画してアクションを中断するには

render :hoge and return

などとするわけですが、これは render がtrueを返すことを期待したandの使用法です。今回は new -> create の流れのなかでエラーを出すために使っていたのですが、エラー表示や hidden の埋め込みのためにrender :newではなくnew()しておりました。

普通に使う分にはそれでよかったのですが、ある条件下で new アクションからまた違う view を render して早期リターンしておりまして、そこではまりました。こんなコードなんです。

def new
  if @model.valid?
    render :verify and return
  end
end

def create
  if params
    @model = Model.new(user_params)
    new and return
  end

  render :new #上で中断されずに死
end

そうです、アホみたいにコピペで and return しておったおかげで new アクションが true を返さず、create アクション側の return が実行されずにしかも create アクションで明示的に render しとるもんですから DoubleRenderError 死んでおったわけですね。

ちゃんと頭使わないと死ぬなぁという話でした。