Rails Controllerのrenderメソッドレシピ集


Ruby on Railsのコントローラのrenderメソッドの使い方を説明します。renderはViewの表示の制御を行うためのメソッドです。

🐹 ビューの表示

renderを省略する

Railsのコントローラでrenderを省略すると「app/views/コントローラ名/アクション名.html.erb」を使います。

# app/controllers/articles_controller.rb
# GET /articles
# app/views/コントローラ名/index.html.erb が呼ばれます
def index
@articles = Article.all
end

他のアクションのビューを表示する

render アクション名で同じコントローラ内の別のアクションのビューを表示できます。

# newアクションのviewを表示
render :new

ビューのパスを指定して表示

ビューのパスを指定して表示することもできます。

# app/views/statics/home.html.erb を表示
render template "static/home"

🐯 JSONを返す

renderjsonオプションを付けるとJSONとしてレスポンスを返します。指定したオブジェクトにto_jsonオブジェクトがあれば、自動でJSONに返却します。

def index
@articles = Article.all
render json: @articles
end

出力内容の簡単な制御は「as_jsonメソッド」を活用するとはかどります。より複雑なjsonの出力フォーマットの指定はRailsに標準で組み込まれているRubyGem「jbuilder」がお勧めです。

🏀 文字列を返す

renderplainオプションを指定することで文字列を直接表示できます。(ビューを省略できます)

render plain: 'Hello, Ruby world!'

🗽 ステータスコードのみ返す

APIなどでステータスコードのみ伝える場合はheadメソッドを使います。

# リクエストが正常に処理された
head :ok
# リクエエストが不正
head :bad_request

🎳 Viewの表示を文字列として取得する

ビューをrenderした結果を文字列として取得する場合は、render_to_stringメソッドを使います。

puts render_to_string action: :index

📚 おすすめの書籍