pensé que sería bueno para rellenar un campo de estado en una tabla de ActiveRecord utilizando constantes. Sin embargo, cuando se trata de verificar si este estado tiene un estado particular, estoy teniendo problemas.Cómo almacenar y comparar: símbolos en un ActiveRecord (Ruby on Rails)
Si hago lo siguiente,
e = Mytable.new
e.status = :cancelled
e.save
entonces reencontrar el registro y tratar de comparar mi estado para el símbolo, la comprobación falla. Tengo algo de salida de la consola para mostrar esto.
irb(main):060:0> e.status.eql?("cancelled")
=> true
irb(main):061:0> e.status.eql?(:cancelled)
=> false
irb(main):062:0> e.status == :cancelled
=> false
irb(main):063:0> e.status == "cancelled"
=> true
irb(main):064:0> e.status == :cancelled.to_s
=> true
¿Existe una forma mejor de mantener un estado en un registro? ¿Hay una manera de probar si un valor de campo actual es igual al: Símbolo sin necesidad de convertir el símbolo: en una cadena? Estoy pensando que puede haber un operador del que no estoy al tanto.
ecoologic tiene una buena solución para usted, pero yo recomendaría tal vez dirigir lejos de esto y tal vez hacer una clase con constantes en el mismo. Que puede hacer cosas como 'e.status = Status :: CANCELLED' y qué no. E internamente eso podría ser una cadena y no importa. Usted todavía está utilizando constantes, y va a error si esa constante no existe, y es más limpio de esa manera. – MrDanA
¿por qué no anula el captador de su columna? – apneadiving
Enmendé mi respuesta antes de leer estos dos comentarios, pero me gustaría decir que me encanta la solución @MrDanA, ¡debe escribir una respuesta y la votaré! – ecoologic