
render メソッドの引数に何を指定しているのかさっぱりわかりません・・・
そんな疑問にお答えします!
Ruby on Rails の render メソッドをなんとなく使ってないでしょうか。
render メソッドの使い方が分かっていなくても最初はなんとなくうまくいくことがありますが、少しでも込み入ってくるとすぐにつまづきます。
逆に render メソッドをしっかりと理解しておくとプログラムを自身を持って書けるようになります。
本記事では特に初心者が理解したほうがいい「render メソッドの引数のルール」を詳しく解説します。

render メソッドの引数のルールがわかれば、Rails アプリケーションの実装力が身につきますよ!!
render メソッド全般についての解説は以下の記事も参照してください。
≫ 【Rails】renderの解説!基本・引数・オプションを完全理解!
render メソッドとは

render は HTTP レスポンスを作るためのメソッドの一つです。
特徴としては「erb などのテンプレートファイル」を使って 「HTML などのレスポンス」を作ります。
render メソッドの使い方
コントローラで呼び出される render メソッドの引数のパターンを解説していきます。
render メソッドの基本は erb ファイルを使って HTML を作ることです。
そのため、render メソッドの引数で erb ファイルのパスを指示する方法を理解しましょう。
render template: ‘xxx/yyy’
引数に以下のハッシュを指定します。
キー | :template |
値 | erb ファイルパスを表す文字列 |
以下の形です。
render templete: 'xxx/yyy'
ファイルパスは以下のルールで省略されます。
- ファイルパスのうち、先頭の「app/views」を省略する
- 拡張子を省略する
例えば
app/views/users/index.html.erb
というパスのerbファイルを使いたい場合は、

となり、
render templete: 'users/index'
と指定することになります。
ただし、template: で指定するのは少々古い書き方です。
現在は必要がなければ次に説明するように、省略する方が一般的です。
template: は省略できる
template: は省略できます。
render 'xxx/yyy'
erbファイルパスの指定方法は template: で指定した場合と同じです。
例えば
render 'users/index'
なら、
app/views/users/index.html.erb
を使用して HTML を作る、という命令となります。
フォルダ名はコントローラ名なら省略できる
render 'xxx/yyy'
の ‘xxx/yyy’ のうち、フォルダ名の部分(xxx/)はコントローラ名に一致する場合に省略可能です。
ただし、ここで言うコントローラ名はコントローラのクラス名から以下の手順で変換したものです。
- Controller を省略する
- スネークケース化する
例えば、以下の PrivatePostsController であれば、
class PrivatePostsController < ApplicationController
end
以下のように変換され、コントローラ名は private_posts となります。

スネークケースとは複数単語からなる変数やクラス名などを1単語のように記述するためのルールの一つです。
以下のルールで書きます。
- すべて小文字
- 単語の区切りはアンダースコア(_)でつなぐ
例えば Happy birthday なら happy_birthday となります。
Ruby では以下をスネークケースで命名するのが一般的です。
- 変数名
- メソッド名
- ファイル名
一方、単語の先頭をすべて大文字にして結合して記述するルールを Pascal ケースと呼びます。
例えば Happy birthday なら HappyBirthday となります。
Ruby では、以下をPascal ケースで命名するのが一般的です。
- クラス名
- モジュール名
もし、このコントローラで
app/views/private_posts/index.html.erb
というファイルを使ってHTMLを作りたい場合、本来は
class PrivatePostsController < ApplicationController
def index
render 'private_posts/index'
end
end
のように、render の引数を ‘private_posts/index’ としなければならないところです。
しかしフォルダ名(private_posts)とコントローラ名(PrivatePostsController→private_posts)が一致しているので以下のように’index’ だけにすることができます。
class PrivatePostsController < ApplicationController
def index
render 'index'
end
end
フォルダ名が無いときはシンボルでもいい
render 'index'
のように省略されて引数の文字列にフォルダ名が無い場合は
render :index
のようにシンボルとしてもオーケーです。
経験上、スラッシュがない場合はシンボルで記述する事が多いです。
フォルダ名=コントローラ名、ファイル名=アクション名なら renderメソッドの呼び出し自体を省略できる
Ruby on Rails を学習しているとコントローラのコードで
class UsersController < ApplicationController
def index
@users = User.all
end
end
のように render も redirect_to も呼んでいないコードを見たことはないでしょうか。
実はこの場合でも暗黙に render メソッドが呼ばれています。
ここが Ruby on Rails の初学者に分かりづらいところです。
具体的には、render の引数を
- フォルダ名がコントローラ名
- ファイル名がアクション名
として呼ばれたことになります。
つまり、上記の例では
- フォルダ名 = users (コントローラ名)
- ファイル名 = index (アクション名)
であるため、以下のように記述したのと同じです。
class UsersController < ApplicationController
def index
@users = User.all
render 'users/index'
end
end
そのため、
app/views/users/index.html.erb
を使用して HTML を作る、という命令となります。
まとめ
render メソッドはコントローラとビューをつなぐ大切なメソッドです。
render メソッドの引数は以下のように理解しておきましょう。
- erbファイルへのパスを表している
- コントローラ名やアクション名による省略記法がある
Ruby や Ruby on Rails では「できるだけ省略する」という文化があります。
本記事で紹介した「省略ルール」を覚えておくと短く書けますし、他人の書いたコードもスラスラと読めるようになり、上達できます。
render メソッド全般についての解説は以下の記事も参照してください。
≫ 【Rails】renderの解説!基本・引数・オプションを完全理解!