1.Se você só precisa de um sql no postgres, aqui está:
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)
você pode alterar a ordem dos estados no sql, não precisa alterar o código ruby, toque o violino sql:http://sqlfiddle.com/#!12/976e9/3 .
2.Na sugestão de mu, você pode usar um tipo enum, é mais eficiente, se precisar alterar a ordem, você pode recriar o enum. veja este violino 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.De forma pura rubi, você pode definir um hash:
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.Mas na minha opinião, você deve adicionar uma tabela chamada "states", com as colunas "name" e "sequence", e especificar a ordem em "sequence". Junte-se aos "eventos" e "estados" então. Quando você altera o pedido, não é necessário alterar o código.