Zdarzenie może mieć 3 stany.
Czy lepiej użyć pola typu boolean do ich przechowywania i potem mieć stan: NULL FALSE i TRUE
Czy lepiej użyć pola typu integer i mieć stany 1 2 3?
Z którym sposobem przechowywania stanu będzie łatwiej się pracowało.
Jeśli zrobię boolean to dla pola status z wartością FALSE i TRUE
nil? będzie pokazywał false
natomiast
blank? będzie pokazywał true dla NIL i FALSE.
Jak potem testować pole status?
Można dać if status == nil, true, false ale wolę użyć status.blank?, startus.nil? itp.
Zależy czy potrzebujesz w jakikolwiek sposób obsługiwać zmiany tych stanów. Jeśli tak - któryś z zaproponowanych pluginów będzie dobrym rozwiązaniem. Jeśli nie - jakaś forma tinyinta się sprawdzi, ale sugerowałbym stany, będące potęgami dwójki (łatwy sposób pozwają tworzyć kombinacje stanów, co teraz może nie być potrzebne, ale w przyszłości - owszem).
Ech, premature optimization. W każdej ze znanych mi aplikacji po jednej kolumnie tekstowej na typ stanu wystarcza. Silniki SQL są wystarczająco dobre w indeksowaniu, żeby bez zacięć obsłużyć query z kilkoma warunkami dotyczącymi dwóch lub więcej stanów, nawet jeśli stany opisane są tekstem.
Poświęcenie czytelności kodu (i schematu bazy) na rzecz niemierzalnego zysku w wydajności według mnie nie ma sensu.
Jeszcze dodałbym prostego checka na kolumnie ze stanem rekordu, niezależnie od tego czy to integer czy text, coś prostego jak check ( status in (1,2,3)), co pozwoli uniknąć takich kwiatków jak pojawienie się 18tys rekordów ze statusem 100, o którym nikt nie ma pojęcia. Oczywiście mówię, o sprawdzaniu tego po stronie bazy, bo sprawdzanie w modelach czasem nie jest wystarczające.