attenzione: la stringa 'false', o il simbolo :false NON
corrispondono al valore booleano false, ovvero l’ istanza di FalseClass:
“false”.class => String
:false.class => Symbol
false.class => FalseClass
quindi , se la tua variabile attivo è ‘FALSE’ o ‘false’,
indipendentemente dal casing, verrà sempre valutata true - gli unici
valori in ruby che vengono valutati come false sono appunto false e nil,
tutto il resto è true, anche il numero 0 (zero).
Hai ragione, mi restituisce Array.
Ho risolto con attivo.to_s == “TRUE”
Giusto così per ragionare assieme però nn riesco a capire il tuo pezzo
di codice.
La variabile ‘attivo’ così come l’hai proposta è un flag boolean,
mentre in realtà è un vettore contenente dei dati.
E’ uno script per aggiornare dei valori in un server LDAP:
def inserisci(account)
[snip]
probabilmente è un mio errore, ma continuo a non capire cosa ci metti
in quella variabile attivo.
Vabbè, forse poco importa visto che sembra tu abbia risolto il problema.
Occhio però, per la manutenibilità del tuo codice che stai trattando
un Array come un flag boolean e solo tramite un workarount (col
to_s==‘TRUE’) lo stai facendo andare.
Potresti valutare l’idea di un refactor di quella porzione di codice
Just my 0.02€
E’ uno script per aggiornare dei valori in un server LDAP:
def inserisci(account)
[snip]
probabilmente è un mio errore, ma continuo a non capire cosa ci metti
in quella variabile attivo.
Probabilmente gli arriva da questa linea dell’hash
“accountActive” => [“#{account[“accAttivo”]}”],
ma se così fosse si potrebbe rendere tutto più comprensibile al prossimo
manutentore dello script modificando il codice in modo simile a questo.
new_entry = inserisci(account)
if attivo?(new_entry)
spedisci(new_entry)
end
def attivo?(new_entry)
new_entry[“accountActive”] == [“TRUE”]
end
Ho usato la convenzione ruby di aggiungere un ? in fondo al nome dei
metodi che ritornano un boolean.
Domanda: account[“accAttivo”] ritorna un boolean che viene convertito a
stringa oppure una stringa? In quest’ultimo caso basterebbe scrivere
“accountActive” => [account[“accAttivo”]],
sempre che siano davvero necessari gli array e non basti
In ruby tutte le espressioni restituiscono un valore. Quindi,
attivo
è un’ espressione, come lo è
attivo == "true"
l’ espressione
attivo
restituisce false se attivo è false o nil, true se attivo è qualsiasi
altra cosa
l’ espressione
attivo == "true"
restituisce true se attivo è la stringa “true”, altrimenti false.
Si tratta di capire cosa stai assegnando alla variabile attivo. Dal nome
e dall’ utilizzo che stai cercando di farne sembra che debba essere una
variabile booleana (true o false), però dalla tua risposta pare che tu
gli stia assegnando altri valori (stringa? array?). Controlla dove fai
l’assegnamento di attivo.