1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】renderの基本形 / 省略形 / collection / local_assign.fetch

Posted at

概要

今回は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に設定しておきます。

_card.html.erb
<% 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_cousertureにします。

books/index.html.erb
<%= render partial: "card", collection: @books, locals: {show_course: true} %>

その逆で。表示したくないusers/index.html.erbなら、locals: {show_course: true}は入りません。

users/index.html.erb
<%= render partial: "card", collection: @books %>

※単純にlocalsに { show_course: false }とかでもいけると思います。

これに関しては、文献が全くないので先輩情報。ありがたや。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?