renderにインスタンス変数を渡す場合

renderにインスタンス変数を渡す場合の使い方
以下のようにコントローラで取得したレコードの数だけrenderするのを防ぐために、renderに直接コントローラで取得したインスタンス変数を渡す方法があるが、その解釈が誤っていたので、こちらに記載します。

コントローラで取得したレコードの数だけrenderされるケース (each文で[_board.html.erb]が何度もrenderされてしまう。)

[app/controller/board_controller.rb]

def index
  @boards = Board.all
end
[app/views/index.html.erb]

<% @boards.each do |board| %>
  <%= render partial: "board", locals: { board: board } %>
<% end %>

上記を回避して何度もrenderされるのを防ぐ記述が以下 ([_board.html.erb]を取得しているレコードの数だけ作成し、それを一気にrenderするイメージ。)

[app/controller/board_controller.rb]

def index
  @boards = Board.all
end
[app/views/index.html.erb]

<%= render @boards %>

今までの解釈が以下であったが、実際は違っていました。。。。

・呼び出す部分テンプレート[board.html.erb]がviewsフォルダ内にあるboardsフォルダに存在する。
・部分テンプレート名が
board.html.erb(取得しているインスタンス変数の単数形)である。
・部分テンプレート内で使う変数がboard(取得しているインスタンス変数の単数形)である。

正しくは、以下になります。
・呼び出す部分テンプレート[board.html.erb]がviewsフォルダ内にあるboardsフォルダ(インスタンス変数を取得しているコントローラ)以下に存在する。
・部分テンプレート名が
board.html.erb(取得しているインスタンス変数名は関係なく、実際に取得しているテーブルの単数形)である。
・部分テンプレート内で使う変数がboard(取得しているインスタンス変数名は関係なく、実際に取得している変数の単数形)である。

つまり、Railsは「変数名」ではなく「変数の実体」を元に使用すべき部分テンプレートを推測する。 ex)

[app/controller/user_controller.rb]

def index
  @boards = User.all
end
[app/views/index.html.erb]

<%= render @boards %>

{board.html.erb}ではなく、{user.html.erb} [app/views/users/_user.html.erb]がrenderされる