Set defaults for JSONb postgres columns in Rails
Make sure to pass the migration a native Ruby hash as the default value. DO NOT pass it a string representation of an hash, thinking that it'll work (as valid JSON).
DO THIS
t.jsonb :preferences, default: {}, null: false
NOT
t.jsonb :preferences, default: '{}', null: false
It'll break in a maddeningly non-obvious way. Take my word for it. Also there is this relevant StackOverflow post which saved my ass.