#render
htmlを分割します。
render というRailsのメソッドを使用して、htmlを別ファイルに分割することができます。
<h1>
<%= render "layouts/header" %>
</h1>
↓参照
app/views/layouts/_header.html.erb
<header class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
##render "○○○"
app/views/messages/index.html.erb
.menu
= render "layouts/menu"
// これはlayoutsフォルダにある_menu.html.hamlにいく
.view
= render "view"
///これは同じmessagesフォルダにある_view.html.hamlにいく
##コントローラ内でrenderを使用する
controllers.rb
def index
render action: :new
end
上記の様にコードを記載するとnewアクションに対応するviewを表示することができます。
controllers.rb
def index
render template: "user/new"
end
この様に記載すると違うコントローラ内のアクションを取り出すこともできます。
##パーシャルにローカル変数を渡したいとき
index.html.erb
#中略
<%= render partial: 'index_body', locals: { index: @index } %>
パーシャル名 ローカル変数名: インスタンス変数名
#省略形
<%= render 'index_body', index: @index %>
_index.body.html.erb
<div class="media-body">
<ul class="list-inline">
<li>
<%= link_to app_path do %>
<i class="fa fa-reply" aria-hidden="true"></i>一覧ページへ戻る
<% end %>
</li>
</ul>
↓ ココに注目
<h2><%= index.name %></h2>
<h3><%= index.display_price %></h3>
<p><%= index.description %></p>
(以下、省略)
</div>
localsオプションを使用することで、@index
というインスタンス変数をindex
というローカル変数にした状態で_index_body.heml.erb
に渡すことができます。