###前提・実現したいこと
ruby on rails(データベースはmysql)で
フラグ管理をしたいと考えているのですが、boolean型のカラムの中身の更新(切替)がうまくできず困っています。
やってみたことを述べると、
まずboolean型のカラムを追加、カラムを追加したモデルファイルにフラグの定義を書いてenum(railsのフラグ管理機能)を使えるようにしました。
ruby
1class AddBatchFlagToAccounts < ActiveRecord::Migration[5.1] 2 def change 3 #定時処理中かの状況を判断するbatch_flagカラムを追加する,not_null制約をつける 4 add_column :accounts, :batch_flag, :boolean, default: 0, null: false 5 end 6end
ruby
1class Account < ApplicationRecord 2 3#enum(フラグ管理)の定義、定時処理実行中(processing_on)ならtrue,未実行(processing_off)ならfalse 4enum batch_flag: { processing_off: false, processing_on: true } 5 6end
次にboolean型のフィールドの中身を更新するためのコードをrailsコンソールで試してみました。
trueへの書き換えは、
ryby
1Account.order(:id).each do |account| 2 account.batch_flag = true 3 account.save 4end
という風にすればbatch_flagのフィールドがtrue(データベース上ではprocessing_onと表示)になるのですが、
falseの場合、上記の書き方だとnullになってしまうらしく、not_null制約に引っかかってロールバックされて更新することができません。
ruby
1#失敗したコード。結果がnullになってしまう 2Account.order(:id).each do |account| 3 account.batch_flag = false 4 account.save 5end 6 7#エラーメッセージ 8ActiveRecord::NotNullViolation: Mysql2::Error: Column 'batch_flag' cannot be null: UPDATE `accounts` SET `batch_flag` = NULL, `updated_at` = '2018-03-25 00:06:23' WHERE `accounts`.`id` = 14 9
どうすれば、boolean型のフィールドをfalseに書き換えることができるのか、
教えて頂ければ幸いです。
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
mysql 5.6.39
回答1件
あなたの回答
tips
プレビュー