partial: を記述しないとパーシャル先でローカル変数を使うときにエラー吐く

こんにちは!kossyです!




本日の気になったニュースはこちら
www.nhk.or.jp

最近暇なので情報収集のために月ー木まで毎日見ているのですが、
切り口が面白くて視聴が楽しみです。

今回の放送は終活に関してですが、
社会との繋がりを更に大事にして生きていこうと思いました、、、











さて、今回は一緒に使われがちなnew画面とedit画面のpartial時のエラーについて、
ブログに残してみたいと思います。




環境
Rails 5.0.7
Ruby 2.3.6
MacOS Mojave
Haml








状況

newアクションで表示する画面とeditで表示する画面がほとんど一緒で冗長なので、
_form.html.hamlとして共有したい

new.html.haml

.d-flex.align-items-center
  %h1 新規作成
  .ml-auto.boards__linkBox
    = link_to '一覧', root_path, class: 'btn btn-outline-dark'
= render 'shared/form', locals: { board: @board }



edit.html.haml

.d-flex.align-items-center
  %h1 編集
  .ml-auto.boards__linkBox
    = link_to '一覧', root_path, class: 'btn btn-outline-dark'
= render 'shared/form', locals: { board: @board }



_form.html.haml

= form_for board do |f|
  .form-group
    = f.label :name, '名前'
    = f.text_field :name, class: 'form-control'
  .form-group
    = f.label :title, 'タイトル'
    = f.text_field :title, class: 'form-control'
  .form-group
    = f.label :body, '本文'
    = f.text_area :body, class: 'form-control', rows: 10
  = f.submit '保存', class: 'btn btn-primary'

これでイケると思いましたが、ダメでした。

f:id:kossy-web-engineer:20181113225009p:plain


renderでローカル変数渡す時はpartial: を記載しないとダメっぽい

どうやら、

= render partial: 'shared/form', locals: { local: @local }

としないとエラーになるみたいです。
partial先を明示的に指定しないと、local変数がパーシャル先に渡らない仕様なんですかね、、、

ともあれ、上記のようにpartialを追記したら動くようになりました。