rails の render 軽くまとめ
定期的に rails render controller で検索される方がいるようなので、もう一度まとめ。
まず rails の ActionController の render に :controller オプションはありません。コントローラをまたいだレンダリングを行いたいなら :template か :file オプションを使えば実現できます。
# comments_controller.rb def create @post = Post.find(params[:post_id]) if @post @comment = Comment.new(params[:comment]) @comment.post = @post @comment.remote_host = request.remote_ip if @comment.save redirect_to @post else # このどちらかを使う # render :template => "posts/show", :locals => {:post => @post} # render :file => "#{RAILS_ROOT}/app/views/posts/show.html.erb", :layout => true end end end
上のコードは posts/show から comment を create しようとした場合の動作を想定しています(ActiveResource を使う前提)。コントローラは comments_controller になるわけですが、コメント作成失敗時にエラーメッセージを残しつつ元の posts_controller に戻さなくてはいけません。
:template と :file のどちらでもうまく動くようですが rails のビューを利用するのであれば、おそらく前者を使うべきだと思います。render :file は本当に特定のファイルを使いたいときなどに便利なのではないでしょうか。