Ho una dichiarazione del caso e sto cercando di usare l'operatore ternario per fare ulteriori controlli condizionali. Ma si sbaglia.
ecco un esempio del codice
case url
when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url :protocol => "https"
.
.
.
else regular_signup_url
end
La cosa veramente strana è che funziona se si usa quanto segue
case url
when partner_x_url then if Rails.env.development?; partner_signup_url; else partner_signup_url :protocol => "https"; end
.
.
.
else regular_signup
end
Qualche idea sul perché questo sta accadendo?
risposte:
6 per risposta № 1Ti stai perdendo il ?
operatore:
when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url :protocol => "https"
Mi succede tutto il tempo con un metodo che termina con un punto interrogativo :)
MODIFICARE: Dato che ora hai aggiunto quell'operatore, sospetto che abbia a che fare con la precedenza degli operatori. Cerca di evitare questo tipo di problemi usando le parentesi attorno agli argomenti della funzione:
when partner_x_url then Rails.env.development? ? partner_signup_url : partner_signup_url(:protocol => "https")
Esempio: senza parentesi di funzione, si ottiene un errore di sintassi:
1.9.3p125 :006 > case @foo when true then true ? puts "foo" : puts "bar" end
SyntaxError: (irb):6: syntax error, unexpected tSTRING_BEG, expecting keyword_do or "{" or "("
case @foo when true then true ? puts "foo" : puts "bar" end
^ ^
Con parentesi, non ti piace:
1.9.3p125 :007 > case @foo when true then true ? puts("foo") : puts("bar") end
=> nil