У меня есть такая модель:
create_table :settings do |t|
t.integer :user_id
t.boolean :send_notification, :default => true
end
Это работало хорошо, пока мне не нужно было указать несколько типов уведомлений (электронная почта и / или смс), и я хочу, чтобы пользователь мог указать, какое уведомление ему нужно. Поэтому я подумал, что это выполнимо, когда я смотрю на свою таблицу расчетов в базе данных:
+----------------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | MUL | NULL | |
| send_notification | tinyint(1) | YES | | 1 | |
+----------------------+------------+------+-----+---------+----------------+
Итак, я подумал о повторном использовании столбца send_notification с битовой маскировкой, например 0 означает ничего, 1 означает только электронную почту, 2 означает только смс, а 3 означает как смс, так и электронную почту. В базе данных все работало хорошо, но когда я попробовал это в скрипте / консоли. Я понял, что это невозможно (битовая маскировка на логическом поле).
ree > setting = Setting.first
=> #<Setting id: 1, user_id: 1, send_notification: false>
ree > setting.send_notification = 2
=> 2
ree > setting
=> #<Setting id: 1, user_id: 1, send_notification: false>
Так что мне нужно изменить тип столбца, но это немного дорого, так как моя таблица очень большая. Есть ли лучшее решение, кроме создания файла миграции и rake db:migrating
?