1.Als je alleen een sql in postgres nodig hebt, hier is het:
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)
u kunt de volgorde van de toestanden in sql wijzigen, u hoeft de ruby-code niet te wijzigen, speel de sql-viool:http://sqlfiddle.com/#!12/976e9/3 .
2.In de suggestie van mu kun je een enum-type gebruiken, het is efficiënter, als je de volgorde moet wijzigen, kun je de enum opnieuw maken. zie deze sql viool: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. Op pure robijnrode manier kun je een hash definiëren:
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. Maar naar mijn mening zou je een tabel met de naam "states" moeten toevoegen, met kolommen "name" en "sequence", en de volgorde specificeren in "sequence". Doe dan mee met de "evenementen" en "staten". Wanneer u de bestelling wijzigt, hoeft u de code niet te wijzigen.