1.Nếu bạn chỉ cần một sql trong postgres, đây là:
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)
bạn có thể thay đổi thứ tự các trạng thái trong sql, không cần thay đổi mã ruby, chơi sql fiddle: http://sqlfiddle.com/#!12/976e9/3 .
2. Theo gợi ý của mu, bạn có thể sử dụng kiểu enum, nó hiệu quả hơn, nếu bạn cần thay đổi thứ tự, bạn có thể tạo lại enum. xem sql fiddle này: 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. Theo cách thuần khiết của ruby, bạn có thể định nghĩa một hàm băm:
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.Nhưng theo ý kiến của tôi, bạn nên thêm một bảng có tên là "trạng thái", với các cột "tên" và "trình tự", và chỉ định thứ tự trong "trình tự". Tham gia các "sự kiện" và "tiểu bang" sau đó. Khi bạn thay đổi đơn đặt hàng, bạn không cần phải thay đổi mã.