Tengo el siguiente Array:
ACTIONS = [
:error,
:to_clear,
:to_clear,
:out,
:pass,
:dribbling,
:kick,
:spectacular_pass,
:spectacular_dribbling,
:shoot,
:goal]
Y en un trozo de código de mi programa que hago lo siguiente:
MatchDetail.new({
:player => attack[play],
:club => turn,
:action => MatchDetail::ACTIONS[play],
:minute => last_minute,
} )
Almacena los sÃmbolos asÃ:
— :to_clear
¿Por qué sucede esto?
Carlos Belizón wrote:
¿Por qué sucede esto?
¿SerÃa mejor almacenar el sÃmbolo como un entero?
On Tue, Jun 16, 2009 at 22:12, Carlos
Belizón[email protected] wrote:
Carlos Belizón wrote:
¿Por qué sucede esto?
¿SerÃa mejor almacenar el sÃmbolo como un entero?
Lo que sucede es que un sÃmbolo de Ruby no puede ser almacenado en la
base de datos y Rails lo “serializa” en YAML para guardarlo y
recuperarlo. Creo que la solución funciona correctamente, aunque es un
poco Ruby-especÃfica.
Seguro que mucha gente ha encontrado este problema y como
solucionarlo, te recomiendo un paseo por Google.
Suerte.
Daniel R. Troitiño wrote:
Lo que sucede es que un sÃmbolo de Ruby no puede ser almacenado en la
base de datos y Rails lo “serializa” en YAML para guardarlo y
recuperarlo. Creo que la solución funciona correctamente, aunque es un
poco Ruby-especÃfica.
Seguro que mucha gente ha encontrado este problema y como
solucionarlo, te recomiendo un paseo por Google.
Suerte.
El problema es que para recuperar el sÃmbolo he de hacer en todas mis
lÃneas de código:
YAML.load(Tabla.simbolo)
¿Cómo podrÃa ahorrarme eso en mi modelo?
Xavier N. wrote:
2009/6/16 Carlos Belizón [email protected]:
¿Cómo podrÃa ahorrarme eso en mi modelo?
Por que no usas cadenas? Con %w() te quedaria hasta mas limpio.
Te explico la idea para que tu mismo me digas si lo ves más limpio:
En mi aplicación los partidos contienen comentarios, dichos comentarios
no son más que meras plantillas, en las que se especÃfica que hace cada
jugador en un momento determinado, ya sea un gol, una falta, una tarjeta
amarilla, etc…
Dichas jugadas son siempre las mismas, no varÃan en el tiempo, de ahÃ
que pensara en usar sÃmbolos, entre otros motivos para también usar I18l
y que mi aplicación fuera multilenguaje, ¿Crees que es mejor entonces
usar cadenas en lugar de sÃmbolos?
2009/6/16 Carlos Belizón [email protected]:
Suerte.
El problema es que para recuperar el sÃmbolo he de hacer en todas mis
lÃneas de código:
YAML.load(Tabla.simbolo)
¿Cómo podrÃa ahorrarme eso en mi modelo?
Mirate el método serialize:
http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M002334&name=serialize
Suerte.
2009/6/16 Carlos Belizón [email protected]:
¿Cómo podrÃa ahorrarme eso en mi modelo?
Por que no usas cadenas? Con %w() te quedaria hasta mas limpio.
Buenas,
para evitarte la conversión cada vez que cargues un modelo yo harÃa lo
que
te han sugerido, guardarlo como un string o un entero. En este caso para
hacerlo un poco más expresivo, utilizarÃa constantes y las sacarÃa fuera
del
array a la hora de acceder a ellas. Piensa que ahora te puedes acordar
en
qué posición está cada valor, pero espérate dentro de unos meses y verás
cómo te toca revisar el código para no equivocarte. Luego otra cosa es
que
quieras englobar todas las acciones dentro de un array para lo que sea.
Yo lo plantearÃa tal que asÃ:
class MatchDetail
ACTION_ERROR = 0
ACTION_TO_CLEAR = 1
ACTION_OUT = 2
…
ACTIONS = [ACTION_ERROR, ACTION_TO_CLEAR, ACTION_OUT, …]
end
MatchDetail.new(
:player => attack[play],
:club => turn,
:action => MatchDetail::ACTION_PLAY,
:minute => last_minute,
)
Si quisieras utilizar los valores de la acción para una posible
traducción
con I18n, podrÃas guardarlos como cadenas tranquilamente para pasar su
valor
los helpers:
modelo
class MatchDetail
ACTION_ERROR = “actions.error”
ACTION_TO_CLEAR = “actions.to_clear”
…
end
vista
fichero con las traducciones es.yml
es:
action:
error: “texto para la acción de error”
Para acabar un detalle más: en ruby, cuando el último parámetro de un
método
es un hash, no hace falta que le pases las llaves si no si quieres
Saludos
2009/6/17 Carlos Belizón [email protected]
Borja MartÃn wrote:
Buenas,
Para acabar un detalle más: en ruby, cuando el último parámetro de un
método
es un hash, no hace falta que le pases las llaves si no si quieres
Saludos
2009/6/17 Carlos Belizón [email protected]
Hey, muchas gracias, me has dado una grandÃsima idea :).