概要
今回はrenderに関して軽くまとめておく。(メモ)
基礎的なことだけど、見たときなんだ??となったので。
renderに関して
基本形
基本となる形は以下。
<%= render partial: "card", locals: {book: @book} %>
省略形
PF制作した際には下記を使用してた。
これは基本ではなく、省略形のパターンと知りました。
<%= render partial: "card", book: @book %>
ちなみに、省略ももっとあるらしい。
<%= render @books %>
実務で基本形を使用していた理由は、
locals: {} にしておくと、RubyMineの補完やコードジャンプがより正確になるというメリットのため。
RubyMineは便利です。笑
collection
collectionを使うことで
each文を使用せずに繰り返しの処理ができるみたい。
<%= render partial: "card", collection: @books =>
上記はつまり下記に書き換えれる。
<% @books.each do |book| %>
<%= render partial: 'card', locals: {book: book} %>
<% end %>
このようにしてeach文をわざわざ書かなくてもeach文を走らせることができる。
local_assigns.fetch
local_assigns.fetchを使用することによって特定の状況に限ってパーシャルに渡すことが可能です。
falseである時は表示がされない状況です。
local_assigns.fetch(:なんでもいい, false(or true))
以下の前提とした場合で説明します。
books/index.html.erb | users/index.html.erb | |
---|---|---|
_card.html.erbを | 表示したい | 表示したくない |
レンダリングされるファイル先でlocal_assigns.fetchをfalseに設定しておきます。
<% if local_assigns.fetch(:show_course, false) %>
<%= render partial: "book_card", collection: books%>
<% end %>
表示したいbooks/index.html.erbファイルで、
_card.html.erbファイルをレンダリングする際にlocals: {show_course: true}
でshow_couserをtureにします。
<%= render partial: "card", collection: @books, locals: {show_course: true} %>
その逆で。表示したくないusers/index.html.erbなら、locals: {show_course: true}
は入りません。
<%= render partial: "card", collection: @books %>
※単純にlocalsに { show_course: false }とかでもいけると思います。
これに関しては、文献が全くないので先輩情報。ありがたや。
参考文献