render メソッドは、コントローラとビューで動作が違う。

Ruby on Rails の render メソッドは、コントローラとビューで動作が違う。

の2つは動作が異なる。

  • *.rhtml やヘルパーから呼ばれるのが、ActionView の render。
  • ActionView の render は、結果の文字列を返す。<%= render "..." %>
  • ActionView の render に :action を指定しても何も返ってこない。

手元のソース( actionpack-1.13.3 )を見ると、 ActionView::Base#render の第一引数に指定できるのは以下のどれか。

  • パスの文字列 ("path/to/template")
  • 以下のキーを持つハッシュ
    • :file (:file => "/path/to/template.rhtml")
    • :partial (:partial => "path/to/partial")
    • :inline (:inline => "<%= 2 + 3 %>")

また、ビューの方には render_to_string が存在しない。render_to_string みたいなことをしたい時に render を使う。

<%= render "shared/header" %>
<%= render { :file => "C:/shared/header.rhtml" }, { :headline => "Welcome", :person => person } %>