ฉันมี enum ใน Model ของฉันที่ตรงกับคอลัมน์ในฐานข้อมูล
enumดูเหมือนว่า:
enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }
ฉันจะรับค่าจำนวนเต็มได้อย่างไร?
ฉันพยายามแล้ว
Model.sale_info.to_i
แต่จะส่งกลับค่า 0 เท่านั้น
ฉันมี enum ใน Model ของฉันที่ตรงกับคอลัมน์ในฐานข้อมูล
enumดูเหมือนว่า:
enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }
ฉันจะรับค่าจำนวนเต็มได้อย่างไร?
ฉันพยายามแล้ว
Model.sale_info.to_i
แต่จะส่งกลับค่า 0 เท่านั้น
integer
คำตอบ:
คุณสามารถรับค่าจำนวนเต็มสำหรับ enum จากคลาสที่ enum เปิดอยู่:
Model.sale_infos # Pluralized version of the enum attribute name
ที่ส่งคืนแฮชเช่น:
{ "plan_1" => 1, "plan_2" => 2 ... }
จากนั้นคุณสามารถใช้ค่า sale_info จากอินสแตนซ์ของModelคลาสเพื่อเข้าถึงค่าจำนวนเต็มสำหรับอินสแตนซ์นั้น :
my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value
คุณจะได้รับจำนวนเต็มดังนี้:
my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value
อัพเดตสำหรับราง 5
สำหรับราง 5 วิธีการข้างต้นจะคืนค่าสตริง :(
วิธีที่ดีที่สุดที่ฉันเห็นในตอนนี้คือ:
my_model.sale_info_before_type_cast
คำตอบของ Shadwell ยังคงใช้งานได้กับราง 5
อีกวิธีหนึ่งคือการใช้read_attribute():
model = Model.find(123)
model.read_attribute('sale_info')
คุณสามารถใช้ได้ read_attribute_before_type_cast
model.read_attribute_before_type_cast(:sale_info)
=> 1
read_attribute_before_type_cast.
คำตอบสั้น ๆ ของฉันคือModel.sale_infos[:plan_2]ในกรณีที่คุณต้องการได้รับค่าplan_2
ฉันเขียนวิธีการใน Model ของฉันเพื่อให้ได้สิ่งเดียวกันในแอป Rails 5.1 ของฉัน
จัดเตรียมสำหรับกรณีของคุณเพิ่มสิ่งนี้ลงในโมเดลของคุณและเรียกใช้บนวัตถุเมื่อจำเป็น
def numeric_sale_info
self.class.sale_infos[sale_info]
end
Model.sale_info.value.to_i? เช่นModel.sale_info.plan_1.to_i