Как проверить, определена ли переменная в рельсах? - PullRequest
31 голосов
/ 18 октября 2011
<% if dashboard_pane_counter.remainder(3) == 0 %>
  do something
<% end>

Если dasboard_pane_counter не был определен, как я могу получить это значение как ложное, а не как исключение?

Ответы [ 6 ]

49 голосов
/ 18 октября 2011
<% 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 %>
5 голосов
/ 20 февраля 2014

local_assigns можно использовать для этого, так как этот вопрос возник несколько лет назад, я подтвердил, что он существует в предыдущих версиях rails

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

Он есть в примечаниях здесь

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

5 голосов
/ 18 октября 2011

При использовании rails и переменных экземпляра для nil определен метод try, поэтому вы можете сделать:

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

, поэтому, если переменная экземпляра не определена, try(:anything) вернет nil и, следовательно,оценивать как ложноеИ nil == 0 ложно

0 голосов
/ 05 октября 2018

Размещение этого ответа для начинающих программистов, таких как я. На этот вопрос можно ответить, просто используя два шага (или один, если использовать &&). Это более длинный и менее симпатичный ответ, но он помогает новым программистам понять, что они делают, и использует очень простую технику, которой пока нет ни в одном из других ответов. Хитрость заключается в использовании переменной экземпляра (@), она не будет работать с локальной переменной:

if @foo
  "bar"
end

Если @foo определен, будет возвращено "bar", в противном случае - нет (без ошибок). Поэтому в два этапа:

if @dashboard_pane_counter
  if @dashboard_plane_counter.remainder(3) == 0
    do something
  end
end
0 голосов
/ 18 октября 2011

Другой способ с аккуратным драгоценным камнем - «andand».

https://github.com/raganwald/andand

0 голосов
/ 18 октября 2011

Insted of

if !var.nil?

Я бы использовал

unless var.nil?

Это намного лучше, рубиновый код!

...