IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

自作Webアプリ「IT勉強会用 名刺ジェネレーター」を公開しました!ぜひご活用ください😀

https://it-benkyoukai-meishi.herokuapp.com/

Rails の render メソッドの :collection オプションを使ってみる

はじめに

ここでは以下の記事を参考にして、render メソッドの :collection オプションを使ってみることにする。

 

使ってみる

ざっくりとアプリを作成する。

  • rails new collection_sample
  • cd collection_sample

 

scaffold する。

  • bin/rails g scaffold Product name:string price:integer
  • bin/rails db:migrate

 

部分テンプレートを作成する。

  • touch app/views/products/_product.html.erb

 

index.html.erb で部分テンプレートを render する。

この時に :collection キーの値に @products を渡す。

f:id:matt-note:20190408143343p:plain

 

コントローラで @products は以下のように定義されているので、これを部分テンプレートに渡すことになる。

f:id:matt-note:20190408143807p:plain

 

_product.html.erb では、index.html.erb からコードを切り出しておく。この時に使う変数は、部分テンプレート名から product となる。変数 product で各々のデータにアクセスできる。(ここでは thead を削除)

f:id:matt-note:20190408144206p:plain

 

サーバーを起動してアクセスして、データを入力してみる。

f:id:matt-note:20190408144455p:plain

-> :collection オプションを使用して部分テンプレートをレンダリングできた。

 

:as オプションを使うと、部分テンプレートに渡す変数名を明示的にすることができる。

f:id:matt-note:20190408171214p:plain

f:id:matt-note:20190408171235p:plain

 

部分テンプレート名が _product.html.erb で、@products をコレクションとして渡したい場合は、以下のように略記することができる。

f:id:matt-note:20190408143539p:plain

f:id:matt-note:20190408144537p:plain