Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby on Rails | metric_fu | Rails Best Practices | replace instance variable with local variable

概要

replace instance variable with local variableへの対応

詳細

particalなビューを利用する場合に、インスタンス変数の利用箇所を
ローカル変数に置き換えることで再利用性を高めるように、という警告。

render :locals => {key: value, key: value ・・・・}

を利用して変数を受け渡します。

修正前

_menu.html.haml(メニュー用部分テンプレート)

※抜粋。only_to_signinがインスタンス変数です。

- if @only_to_signin
  = link_to '/signin/index' do
    %i{:class => 'icon-signin'}
      = t('link.to_signin')
  %hr/ 
application.html.haml
!!!
%html
  %head
    %meta{:"http-equiv" => "Content-Type", :content => "text/html;charset=UTF-8"}/ 
    %title Title
    = stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true
    = javascript_include_tag "application", "data-turbolinks-track" => true
    = csrf_meta_tags
  %body
    = render :partial => "application/menu"
    = render :partial => "application/screen_title"
    = render :partial => "application/simple_message"
    = yield

修正後

_menu.html.haml(メニュー用部分テンプレート)

※抜粋。only_to_signinがローカル変数になりました。

- if only_to_signin
  = link_to '/signin/index' do
    %i{:class => 'icon-signin'}
      = t('link.to_signin')
  %hr/ 
application.html.haml
!!!
%html
  %head
    %meta{:"http-equiv" => "Content-Type", :content => "text/html;charset=UTF-8"}/ 
    %title Title
    = stylesheet_link_tag    "application", media: "all", "data-turbolinks-track" => true
    = javascript_include_tag "application", "data-turbolinks-track" => true
    = csrf_meta_tags
  %body
    = render :partial => "application/menu", :locals => {only_to_signin: @only_to_signin}
    = render :partial => "application/screen_title"
    = render :partial => "application/simple_message"
    = yield