無限に増えるboolean型カラム
例えば、「◯◯の通知を受け取る・受け取らない」とか、何とかフラグみたいなものを保持しようとすると、boolean型カラムで管理することになると思います。
これだと、通知のバリエーションとか、何とかフラグが増える度にmigrationが必要になってしまいだんだん辛くなってきます。。
schema.rb
ActiveRecord::Schema.define(version: 2019_03_08_205817) do
create_table "users", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "name"
t.string "email"
t.boolean "admin", default: false, null: false
t.boolean "hoge_notification_receivable", default: false, null: false
t.boolean "fuga_notification_receivable", default: false, null: false
t.boolean "piyo_notification_receivable", default: false, null: false
# ...
# これではbooleanで管理したいものが増える度にmigrationが必要になってしまう・・
end
end
migration不要でboolean値のバリエーション増加に対応する
その辛み、FlagShihTzuで解消できます!
テーブルに integer型の flags
カラムを追加し、
change_table :users do |t|
add_column :users, :flags, :integer, default: 0, null: false
end
modelに FlagShihTzu
をincludeして管理したいboolean値を定義するだけでOKです!
user.rb
class User < ActiveRecord::Base
include FlagShihTzu # FlagShihTzu をinclude
# has_flagsでbooleanで管理したい値を定義する
has_flags(
1 => :admin,
2 => :hoge_notification_receivable,
3 => :fuga_notification_receivable,
4 => :piyo_notification_receivable,
# 何とかフラグが増えたらここに定義追加するだけでOK!
)
# 各フラグの初期値設定は after_initialize でやると良い
after_initialize :assign_default_flags, if: :new_record?
def assign_default_flags
assign_attributes(
admin: false,
hoge_notification_receivable: true,
fuga_notification_receivable: true,
piyo_notification_receivable: true,
)
end
end
# 使う側は特に意識せずそのまま使える
user.admin # => true
user.hoge_notification_receivable # => false
導入手順や詳細はFlagShihTzuを参照してください。