書き方
4.1 パーシャルをレンダリングする < Action View の概要 - Railsガイド(v7.1)
ActionView::PartialRenderer (v7.1)
render < ActionController::Rendering (v7.1)
忘れがちなrenderメソッドの使い方まとめ [Rails] #Ruby - Qiita
🚨ビューに書く時、頭に=
を付けるのを忘れない
基本
パーシャルを指定する書き方
render partial: "product"
⭐️省略形:渡したいオプションがpartial
のみの時
render "product"
ローカル変数への対応
パーシャルでローカル変数hoge
を使っている場合、代入するオブジェクトを渡す
render partial: "product", locals: { hoge: @product }
⭐️省略形:渡したいオプションがpartial
とlocals
のみの時
render "product", hoge: @product
各要素ごとのパーシャルを並べて表示(each
メソッドを使わない方法)
collection
オプション:イテレーションオブジェクト(ActiveRecord::Relation
オブジェクト*1 など)を渡すと、各要素ごとのパーシャルを並べてレンダリングできる(each
メソッドを使わなくてOK)。
オブジェクトがnil
または空だと、render
はnil
を返すas
オプション:パーシャルのローカル変数名を変更。(デフォルトでは、「パーシャル」と同名の「ローカル変数」にオブジェクトが入るが、as
でそれを自由に変更できる*2)
render partial: 'report', collection: @recent_reports, as: :report
⭐️省略形①:上記のas
オプションを省略した場合、「パーシャル」と同名の「ローカル変数」にオブジェクトが入る。*3
(別の見方をすると、「パーシャル名」と「ローカル変数名」が同じ場合、as
を省略できる)
render partial: 'report', collection: @recent_reports
⭐️省略形②:さらに、@recent_reports
がReport
モデルのインスタンスの場合、以下の省略記法が使える
render @recent_reports
✅これは、使われるパーシャル名は、コレクションの中にある「モデル名」を参照して決定される為。*4
(ちなみに、各要素の「モデル名」がバラバラでも、それぞれ適切なパーシャルが呼び出されるらしい)
参考(最新版)
Action View の概要 - Railsガイド
ActionView::PartialRenderer
ActionController::Rendering
*1:参考:【Rails】クエリの返り値とメソッド(ActiveRecord::Relation) 🚧作成中
*2:参考:Action View の概要 - Railsガイド (v.7.1)
*3:参考:ActionView::PartialRenderer (v.7.1)の、「Rendering a collection of partials」に出てくる具体例の説明文
*4:参考:Action View の概要 - Railsガイド(v7.1)の最後の段落