Как проверить, определена ли переменная в 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