J'ai un enum dans mon modèle qui correspond à la colonne de la base de données.
Le enum
ressemble à ceci:
enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }
Comment puis-je obtenir la valeur entière?
J'ai essayé
Model.sale_info.to_i
Mais cela ne renvoie que 0.
Vous pouvez obtenir les valeurs entières pour une énumération de la classe sur laquelle l’énumération est située:
Model.sale_infos # Pluralized version of the enum attribute name
Cela retourne un hash comme:
{ "plan_1" => 1, "plan_2" => 2 ... }
Vous pouvez ensuite utiliser la valeur sale_info d'une instance de la classe Model
pour accéder à la valeur entière pour cette instance:
my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value
Vous pouvez obtenir le nombre entier comme ceci:
my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value
Mise à jour pour Rails 5
Pour Rails 5, la méthode ci-dessus renvoie maintenant la valeur de chaîne :(
La meilleure méthode que je peux voir pour l'instant est:
my_model.sale_info_before_type_cast
La réponse de Shadwell continue également de fonctionner pour Rails 5.
Une autre façon serait d'utiliser read_attribute()
:
model = Model.find(123)
model.read_attribute('sale_info')
Vous pouvez utiliser read_attribute_before_type_cast
model.read_attribute_before_type_cast(:sale_info)
=> 1
J'ai écrit une méthode dans mon modèle pour obtenir la même chose dans mon Rails 5.1.
Restauration pour votre cas, ajoutez ceci dans votre modèle et appelez-le sur l'objet si nécessaire
def numeric_sale_info
self.class.sale_infos[sale_info]
end
Ma réponse courte est Model.sale_infos[:plan_2]
au cas où vous souhaiteriez obtenir la valeur de plan_2