Sobre estructuras de control

Hola gente.

me preguntaba si era posible preguntar por un rango 2…5 por ej, en un
if,
estoy haciendo lo siguiente , pero no me funciona

<%= @page.id ===2…5? ‘selected’: ’ ’ %>

tambien lo he hecho asi

<%= @page.id ==2…5? ‘selected’: ’ ’ %>

pero solo toma cuando es 5
por ultimo lo he probado asi

<%= (2…10) === @page.id? ‘selected’:‘no’ %>
aqui me arroja error.

por otro lado si lo intento desde la consola

script/console

i = 8

(2…10)===8? “si”:‘no’

devielve si

cual seria la forma correcta de hacerlo en el .erb?

Saludos

Oh!, Gracias Javier por la explicación , me funciona perfecto ahora, me
has
ahorrado mucho tiempo :smiley:
de todas formas traté de hacerlo como me dijiste así (condicion) ? (si)
:
(no), pero siempre me daba ‘si’, haciendo unas pruebas en el console de
esto , (6…[email protected]) ? “si”:“no” , a esto otro (6…10)===(@page.id)
?
“si”:“no”, y asi si funciona :smiley:

bueno muchas gracias por la ayuda

Saludos Cordiales

2008/1/14 javier ramirez [email protected]:

hola,

<%= (2…10) === @ page.id http://page.id? ‘selected’:‘no’ %>

(2…10)===8? “si”:‘no’

devielve si

el problema es el ?

como en ruby el ? es una parte válida del nombre de un método, cuando le
pones ? sin espacio entiende que quieres llamar al método que se llama
así, por lo que cree que @page.id? es un método y da un error.

En el caso de un número, como un identificador en ruby no puede comenzar
por número, entiende que es un literal numérico y no es necesario el
espacio (aunque ya puestos es recomebdable para ser consistentes)

yo para evitar problemas siempre que uso el operador ternario ? lo uso
así (condicion) ? (valor) : (valor)

al ponerle paréntesis estoy seguro de que no estoy introduciendo errores
y de paso queda más claro. Sobre todo cuando tienes cosas como
is_admin? ? true : can_write?

saludos,

javier ramírez

a ha Gracias Xavier por la acotación, se ve mucho mejeor así que con el
===.

Saludos

Normalmente el operador === no se usa asi, esta
pensado para ser usado
por Ruby implicitamente en los case statements.

Totalmente. Por otro lado, en mi caso suelo utilizar
=== para comprobar que un objeto este generado a
partir de una clase especifica, o hereda de esa clase:

Float.ancestors => [Float, Precision, Numeric,
Comparable, Object, Kernel]
2.3.class => Float
Comparable === 2.3 => true

Es interesante que
Numeric === 2.3 => true
es lo mismo que
2.3.class.ancestors.include? Numeric => true
y, como comentabas, es lo mismo que

case 2.3
when Numeric then # something
end

Bueno, todo esto viene a que === puede ser usado fuera
del case, en general cuando tu case tiene una sola
condicion válida. Otro detalle, instance_of no es lo
mismo que === :

2.3.instance_of? Numeric => false
2.3.instance_of? Float => true

y no debe hacer:

2.3 === Comparable => false, siempre la clase antes.


  Tarjeta de crédito Yahoo! de Banco Supervielle.

Solicitá tu nueva Tarjeta de crédito. De tu PC directo a tu casa.
www.tuprimeratarjeta.com.ar

On Jan 15, 2008, at 1:03 AM, Miguel M. wrote:

Oh!, Gracias Javier por la explicación , me funciona perfecto ahora,
me has ahorrado mucho tiempo :smiley:
de todas formas traté de hacerlo como me dijiste así (condicion) ?
(si) : (no), pero siempre me daba ‘si’, haciendo unas pruebas en el
console de esto , (6…10===@ page.id) ? “si”:“no” , a esto otro
(6…10)===(@page.id) ? “si”:“no”, y asi si funciona :smiley:

Un detalle mas.

Normalmente el operador === no se usa asi, esta pensado para ser usado
por Ruby implicitamente en los case statements.

Para preguntar pertenencia a un rango se puede usar por ejemplo include?

(6…10).include?(@page.id) ? “si” : “no”

– fxn