2011-03-09 11 views
6

Tengo un problema con la deserialización del método ActiveRecord serialize en mis pruebas.
Simplemente me da pure String en lugar de mi matriz de datos.Rails El método de serialización de ActiveRecord no funciona en el entorno de prueba

Ejemplo:

User > ActiveRecord::Base 
    serialize :roles, Array 
end 

Console:

u = User.new 
u.roles = ["admin", "support"] 
u.save 
# => true 

User.first.roles 
# => ["admin", "support"] 

En entorno de prueba:

User.first.roles 
# => "--- \n- admin\n- support\n" 

que es una cadena. Parece que la serialización YAML no está funcionando allí, pero no tengo idea de qué hacer para que funcione.

yo ya estaba tratando de averiguarlo con this, this, y thisthis, pero sin suerte.

Cualquier consejo sería muy apreciado.
Martin

+0

¿Qué versión de rieles estás usando? ¿Tu versión ruby? –

+0

Rails 3.0.4, ruby ​​1.8.7 –

Respuesta

2

Después de todo para evitar esto, necesitaba llamar los datos en la base de datos directamente sin la participación del método AR de "serialización".

YAML::load(User.first.roles_before_type_cast) 

Y ahora el entorno de prueba también analiza directamente los datos y me da los roles correctos Matriz.

0

No sé si resuelve su problema, pero siempre se puede volver a la matriz de la cadena mediante

YAML::load("--- \n- admin\n- support\n") 
# => ["admin", "support"] 

Así, en el entorno de prueba, que debe hacer

YAML::load(User.first.roles) 
+0

No funcionará porque el método de serialización AR utiliza automáticamente el análisis YAML cuando intenta obtener datos por: User.first.roles –

+0

@martin ... pero usted decía que no era sucediendo en el entorno de prueba .. – rubyprince

+0

Exactamente, en el entorno de prueba devuelve solo una cadena, pero no puedo hacer el doble YAML :: cargar en el objeto que trabaja en el desarrollo y la producción. Es un truco sucio hacer el análisis YAML a mano en el segundo método en mi objeto. –

Cuestiones relacionadas