2017-09-12 3 views
1

Ich versuche, eine if-Anweisung zu schreiben, die zwei Variablen in einer Puppe erb Vorlage vergleicht:Vergleicht zwei String-Variablen in Puppen Vorlage

<% @array_of_ip_addresses.each_with_index do |ip, idx| -%> 
    <% if @ip == @ipaddress_eth0 -%> 
    <%= "doing something with #{idx}" -%> 
    <% end -%> 
<% end -%> 

ich kann nicht herausfinden, warum, aber die Bedingung auf meine if-Anweisung hält Falsch zurückkehrend (ich habe natürlich bestätigt, dass es ein Match geben sollte).

Was dummes Ding vermisse ich?

Antwort

2

ip ist ein Block Umfang variabel und nicht eine Variable aus dem rufenden Code instanziiert (in diesem Fall template Funktion des Puppet), so dass Sie es nicht als Klasseninstanzvariable mit @ angeben sollen. Wenn Sie, dass entfernen und es als Block Umfang variable ip angeben, wird die Vorlage wie folgt aussehen:

<% @array_of_ip_addresses.each_with_index do |ip, idx| -%> 
    <% if ip == @ipaddress_eth0 -%> 
    <%= "doing something with #{idx}" -%> 
    <% end -%> 
<% end -%> 

die Klasseninstanz verwenden Variable @ip in einer Auflösung von nil wahrscheinlich dazu führen würde, die fast immer falsch sein würde auf jeden Fall als nil != @ipaddress_eth0 es sei denn, Facter konnte einen Wert für Ihre eth0-IP-Adresse nicht auflösen, was ziemlich ungewöhnlich (aber immer noch möglich) wäre.

+0

Alter, du rockst! – yosi1984