1.Jika Anda hanya membutuhkan sql di postgres, ini dia :
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)
anda dapat mengubah urutan status dalam sql, tidak perlu mengubah kode ruby, mainkan biola sql:http://sqlfiddle.com/#!12/976e9/3 .
2. Dalam saran mu, Anda dapat menggunakan jenis enum, lebih efisien, jika Anda perlu mengubah urutan, Anda dapat membuat ulang enum. lihat biola sql ini: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. Dengan cara ruby murni, Anda dapat mendefinisikan 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.Tapi menurut saya, Anda harus menambahkan tabel bernama "status", dengan kolom "nama" dan "urutan", dan tentukan urutannya dalam "urutan". Bergabung dengan "peristiwa" dan "negara" kemudian. Saat Anda mengubah urutan, Anda tidak perlu mengubah kode.