1.अगर आपको पोस्टग्रेज में सिर्फ एक sql की जरूरत है, तो यह है:
select * from events
order by (case state
when 'scheduled' then 1
when 'notified' then 2
when 'invited' then 3
when 'started' then 4
when 'ended' then 5
end)
आप sql में राज्यों के क्रम को बदल सकते हैं, रूबी कोड को बदलने की कोई आवश्यकता नहीं है, sql fiddle खेलें:http://sqlfiddle.com/#!12/976e9/3 ।
2. एमयू के सुझाव में, आप एक एनम प्रकार का उपयोग कर सकते हैं, यह अधिक कुशल है, यदि आपको ऑर्डर बदलने की आवश्यकता है, तो आप एनम को फिर से बना सकते हैं। यह sql fiddle देखें:http://sqlfiddle.com/#!12/f6f3d/2ए>
CREATE TYPE states AS ENUM ('invited', 'scheduled', 'notified', 'started', 'ended');
create table events(
name varchar(100),
state states
);
select * from events order by state;
3. शुद्ध रूबी तरीके से, आप हैश को परिभाषित कर सकते हैं:
test_hash = {'scheduled'=>1, 'notified'=>2, 'invited'=>3, 'started'=>4, 'ended'=>5}
Events.all.sort! {|x, y| test_hash[x.state] <=> test_hash[y.state]}
4.लेकिन मेरी राय में, आपको "स्टेट्स" नाम की एक टेबल को "नाम" और "सीक्वेंस" कॉलम के साथ जोड़ना चाहिए, और "सीक्वेंस" में ऑर्डर निर्दिष्ट करना चाहिए। फिर "ईवेंट" और "स्टेट्स" में शामिल हों। जब आप ऑर्डर बदलते हैं, तो आपको कोड बदलने की आवश्यकता नहीं होती है।