私の外部記憶装置

ただの覚え書きです。ちょこちょこ見直して加筆・修正していますが、間違ってるかも😅

【Rails】パーシャルのレンダリング(render)


書き方

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 }

⭐️省略形:渡したいオプションがpartiallocalsのみの時

render "product", hoge: @product

各要素ごとのパーシャルを並べて表示(eachメソッドを使わない方法)

  • collectionオプション:イテレーションオブジェクト(ActiveRecord::Relation オブジェクト*1 など)を渡すと、各要素ごとのパーシャルを並べてレンダリングできる(eachメソッドを使わなくてOK)。
    オブジェクトがnilまたは空だと、rendernilを返す
  • asオプション:パーシャルのローカル変数名を変更。(デフォルトでは、「パーシャル」と同名の「ローカル変数」にオブジェクトが入るが、asでそれを自由に変更できる*2
render partial: 'report', collection: @recent_reports, as: :report

⭐️省略形①:上記のasオプションを省略した場合、「パーシャル」と同名の「ローカル変数」にオブジェクトが入る。*3
(別の見方をすると、「パーシャル名」と「ローカル変数名」が同じ場合、asを省略できる)

render partial: 'report', collection: @recent_reports

⭐️省略形②:さらに、@recent_reportsReportモデルのインスタンスの場合、以下の省略記法が使える

render @recent_reports

✅これは、使われるパーシャル名は、コレクションの中にある「モデル名」を参照して決定される為。*4
(ちなみに、各要素の「モデル名」がバラバラでも、それぞれ適切なパーシャルが呼び出されるらしい)

参考(最新版)

Action View の概要 - Railsガイド
ActionView::PartialRenderer
ActionController::Rendering