1.postgresで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フィドルを再生します。 http://sqlfiddle.com/#!12/976e9/3 。
2.muの提案では、列挙型を使用できます。より効率的です。順序を変更する必要がある場合は、列挙型を再作成できます。この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.しかし、私の意見では、「states」という名前のテーブルを「name」列と「sequence」列で追加し、「sequence」で順序を指定する必要があります。次に、「イベント」と「状態」に参加します。順序を変更するときに、コードを変更する必要はありません。