1.Ако просто ви трябва sql в postgres, ето го:
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, няма нужда да променяте ruby кода, пуснете sql fiddle:http://sqlfiddle.com/#!12/976e9/3 .
2. В предложението на mu можете да използвате тип enum, това е по-ефективно, ако трябва да промените реда, можете да пресъздадете enum. вижте тази sql цигулка: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. Но според мен трябва да добавите таблица с име "състояния", с колони "име" и "последователност" и да посочите реда в "последователност". Тогава се присъединете към "събитията" и "състоянията". Когато промените поръчката, не е необходимо да променяте кода.