<% if dashboard_pane_counter.remainder(3) == 0 %>
do something
<% end>
Si dasboard_pane_counter n’a pas été défini, comment puis-je l’évaluer à false plutôt que de lever une exception?
<% 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 %>
Lors de l'utilisation de Rails et de variables d'instance, la méthode try
est définie dans nil. Vous pouvez donc:
<% if @dashboard_pane_counter.try(:remainder(3)) == 0 %>
#do something
<% end %>
donc, si la variable d'instance n'est pas définie, try(:anything)
renverra nil et sera donc évalué à false. Et nil == 0
est faux
local_assigns peut être utilisé pour cela, puisque cette question a été posée il y a quelques années, j'ai vérifié qu'elle existe dans les versions précédentes de Rails
<% if local_assigns[:dashboard_pane_counter]
&& dashboard_pane_counter.remainder(3) == 0%>
<% end %>
C'est dans les notes ici
Publier cette réponse pour les codeurs débutants comme moi. Vous pouvez répondre à cette question simplement en utilisant deux étapes (ou une si vous utilisez &&). C'est une réponse plus longue et moins jolie, mais elle aide les nouveaux codeurs à comprendre ce qu'ils font et utilise une technique très simple qui ne figure pas encore dans les autres réponses. L'astuce consiste à utiliser une variable d'instance (@), cela ne fonctionnera pas avec une variable locale:
if @foo
"bar"
end
Si @foo est défini, il retournera "bar", sinon non (sans erreur). Donc en deux étapes:
if @dashboard_pane_counter
if @dashboard_plane_counter.remainder(3) == 0
do something
end
end