私はこのようなモデルを持っています:
create_table :settings do |t|
t.integer :user_id
t.boolean :send_notification, :default => true
end
複数のタイプの通知 (電子メールおよび/または SMS) を指定する必要があり、ユーザーが必要な通知を指定できるようにするまで、問題なく動作していました。したがって、データベースの設定テーブルを見ると、実行可能だと思いました。
+----------------------+------------+------+-----+---------+----------------+
| 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 は SMS のみ、3 は SMS と電子メールの両方を意味します。データベースではすべてうまく機能していましたが、スクリプト/コンソールで試してみました。そうすることは不可能であることに気付きました(ブールフィールドのビットマスキング)。
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
か?