Jak uzyskać wartość całkowitą z enum w Rails?
Mam enum w moim modelu, który odpowiada kolumnie w bazie danych.
enum
wygląda tak:
enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }
Jak mogę uzyskać wartość całkowitą?
Próbowałem
Model.sale_info.to_i
Ale to zwraca tylko 0.
5 answers
Możesz uzyskać wartości całkowite dla enum z klasy, na której znajduje się enum:
Model.sale_infos # Pluralized version of the enum attribute name
Który zwraca hash w stylu:
{ "plan_1" => 1, "plan_2" => 2 ... }
Możesz użyć wartości sale_info z instancji klasy Model
, aby uzyskać dostęp do wartości całkowitej dla tej instancji :
my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-29 14:34:26
Możesz uzyskać liczbę całkowitą w następujący sposób:
my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value
Aktualizacja dla rails 5
Dla rails 5 powyższa metoda zwraca teraz wartość string: (
Najlepsza metoda jaką na razie widzę to:
my_model.sale_info_before_type_cast
Odpowiedź Shadwella nadal działa dla rails 5.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-07 00:09:06
Rails
Innym sposobem byłoby użycie read_attribute()
:
model = Model.find(123)
model.read_attribute('sale_info')
Rails > = 5
Możesz użyć read_attribute_before_type_cast
model.read_attribute_before_type_cast(:sale_info)
=> 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-01 06:38:13
Moja krótka odpowiedź brzmi Model.sale_infos[:plan_2]
W przypadku, gdy chcesz uzyskać wartość plan_2
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 08:37:02
Napisałem metodę w moim modelu, aby osiągnąć to samo w mojej aplikacji Rails 5.1.
Catering dla twojej sprawy, dodaj to do swojego modelu i wywołaj go na obiekcie w razie potrzeby
def numeric_sale_info
self.class.sale_infos[sale_info]
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-27 15:21:50