Deklaracja tzw. enuma, czyli typu wyliczeniowego. Oznacza to, że atrybut (kolumna) state może posiadać z góry wymienione wartości. Wartością opcji state jest w tym przypadku hash, który definiuje mapowanie wartości atrybutu do wartości trzymanej w bazie. W tym wypadku oznacza to ni mniej ni więcej, że wartość w bazie będzie taka sama jak ta przypisana. Dlaczego więc został w ogóle tu użyty enum? Pewnie dlatego by mieć automatycznie wygenerowane dodatkowe metody.
class Order < ApplicationRecord
belongs_to :user
enum state: { new: ‘new’, failed: ‘failed’, completed: ‘completed’ }, _suffix: :order
end
tworząc enum w pakiecie dostajesz helper mehtods - na przykład order.failed?. _suffix: :order zmienia składnię tych helperów - w tym przypadku będą one order.failed_order?.