Как проверить, определена ли переменная в rails?
<% if dashboard_pane_counter.remainder(3) == 0 %>
do something
<% end>
Если dasboard_pane_counter не был определен, как я могу заставить его вычислить значение false, а не создавать исключение?
6 ответов:
<% 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 %>
При использовании rails и переменных экземпляра nil имеет определенный метод
try
, поэтому вы можете сделать:<% if @dashboard_pane_counter.try(:remainder(3)) == 0 %> #do something <% end %>
Поэтому, если переменная экземпляра не определена,
try(:anything)
вернет nil и, следовательно, вычислит значение false. Иnil == 0
является ложным
Local_assigns можно использовать для этого, так как этот вопрос был задан несколько лет назад, я проверил, что он существует в предыдущих версиях rails
<% if local_assigns[:dashboard_pane_counter] && dashboard_pane_counter.remainder(3) == 0%> <% end %>
Это в примечаниях здесь
Публикую этот ответ для начинающих программистов, таких как я. На этот вопрос можно ответить просто, используя два шага (или один, если используется &&). Это более длинный и менее красивый ответ, но он помогает новым программистам понять, что они делают, и использует очень простую технику, которая пока не присутствует ни в одном из других ответов. Фокус в том, чтобы использовать переменную экземпляра ( @ ), она не будет работать с локальной переменной:
if @foo "bar" end
Если @foo определен, то он будет возвращать "bar", в противном случае нет (без ошибки). Поэтому в два этапа:
if @dashboard_pane_counter if @dashboard_plane_counter.remainder(3) == 0 do something end end