web-dev-qa-db-ja.com

変数がレールで定義されているかどうかを確認するにはどうすればよいですか?

<% if dashboard_pane_counter.remainder(3) == 0 %>
  do something
<% end>

Dasboard_pane_counterが定義されていない場合、例外をスローするのではなく、これをfalseに評価するにはどうすればよいですか?

32
cjm2671
<% if defined?(:dashboard_pane_counter) && dashboard_pane_counter.remainder(3) == 0  %>
  # do_something here, this assumes that dashboard_pane_counter is defined, but not nil
<% end %>
49
Matt

Railsおよびインスタンス変数を使用する場合、nilにはtryメソッドが定義されているため、次のことができます。

_<% if @dashboard_pane_counter.try(:remainder(3)) == 0  %>
   #do something
<% end %>
_

したがって、インスタンス変数が定義されていない場合、try(:anything)はnilを返すため、falseと評価されます。そして_nil == 0_は偽です

5
Yule

local_assignsを使用できます。この質問は数年前の質問なので、以前のバージョンのRailsに存在することを確認しました

<% if local_assigns[:dashboard_pane_counter] 
                 && dashboard_pane_counter.remainder(3) == 0%>
<% end %>

ここのメモにあります

http://apidock.com/Rails/ActionController/Base/render

5
katzmopolitan

私のような初心者コーダーのためにこの回答を投稿する。この質問は、2つの手順(&&を使用する場合は1つ)を使用するだけで回答できます。これは長くて見苦しい答えですが、新しいプログラマーが何をしているかを理解するのに役立ち、他の答えにはまだない非常に単純なテクニックを使用します。トリックは、インスタンス(@)変数を使用することです。ローカル変数では機能しません。

if @foo
  "bar"
end

@fooが定義されている場合は「bar」が返され、それ以外の場合は(エラーなしで)返されます。したがって、2つのステップで:

if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end
0
Dennis