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 死んでおったわけですね。
ちゃんと頭使わないと死ぬなぁという話でした。