rails の render 軽くまとめ

定期的に rails render controller で検索される方がいるようなので、もう一度まとめ。
まず railsActionController の 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 は本当に特定のファイルを使いたいときなどに便利なのではないでしょうか。