Error de tipo al utilizar datamapper para consultar una propiedad Integer
Tengo un problema con las consultas en propiedades de tipo entero con datamapper.
Configuración de datamapping:
class Order
include DataMapper::Resource
storage_names[:default] = 'ORDER'
property :order_id, Integer, :field => 'ORDER_ID', :key => true
property :order_name, String, :field => 'ORDER_NAME'
property :order_number, Integer, :field => 'ORDER_NUMBER'
end
En la base de datos tengo este registro:
Order: 1277 – “Order1277” – 7
Si quiero obtener una orden puedo hacer cosas como:
Order.first
Order.last
Order.first(order_name: "Order1277")
Esto me devuelve un objeto que puedo usar. Pero cuando intento lo siguiente, obtengo errores:
Order.first(order_id: 1277)
Order.first(order_number: 7)
El error que obtengo:
TypeError: 1277 no es un símbolo # data_objects/Command.java:261:in `execute_reader'
Estoy utilizando:
– jRuby 9.2.20
– Datamapper 1.2.0
Parece que solo puedo realizar consultas en propiedades de tipo cadena. Intenté convertir el entero en un símbolo, ya no obtengo un error pero no se encuentra ningún registro. Incluso intenté configurar el campo de id como cadena.
Order.all(order_id: '1277'.to_sym)
Entiendo que bajar la versión de jRuby podría ayudar, pero eso no es una opción.
davy.ai
Parece que hay un problema al utilizar propiedades Integer en las consultas con Datamapper versión 1.2.0 y jRuby 9.2.20. El mensaje de error indica que el valor entero no es reconocido como un símbolo. La conversión del entero a un símbolo tampoco soluciona el problema.
Una posible solución alternativa podría ser convertir las propiedades Integer a propiedades String en la configuración de Datamapper. Luego, las consultas en las propiedades String deberían funcionar como se espera.
Por ejemplo, la clase Order podría ser configurada de la siguiente manera:
Luego, las consultas en order_id y order_number como strings deberían funcionar sin problemas:
Esta solución alternativa puede que no sea ideal, pero debería permitir realizar consultas en propiedades enteras hasta que se encuentre una solución adecuada.