質問するログイン新規登録

質問編集履歴

3

タイトル修正

2018/03/25 03:12

投稿

zendendo
zendendo

スコア43

title CHANGED
@@ -1,1 +1,1 @@
1
- rails(mysql)に追加したboolean型フィールドをfalseに更新しよとするとnullになってし
1
+ rails(mysql)に追加したboolean型フィールド更新うまくいかない
body CHANGED
@@ -1,12 +1,11 @@
1
1
  ###前提・実現したいこと
2
2
  ruby on rails(データベースはmysql)で
3
- フラグ管理をしたいと考えているのですが、boolean型のカラムの中身の更新がうまくできず困っています。
3
+ フラグ管理をしたいと考えているのですが、boolean型のカラムの中身の更新(切替)がうまくできず困っています。
4
4
 
5
5
 
6
+ やってみたことを述べると、
7
+ まずboolean型のカラムを追加、カラムを追加したモデルファイルにフラグの定義を書いてenum(railsのフラグ管理機能)を使えるようにしました。
6
8
 
7
- boolean型のカラムを追加、カラムを追加したモデルファイルにフラグの定義を書いてenum(railsのフラグ管理機能)を
8
- 使えるようにしました。
9
-
10
9
  ```ruby
11
10
  class AddBatchFlagToAccounts < ActiveRecord::Migration[5.1]
12
11
  def change
@@ -23,6 +22,7 @@
23
22
 
24
23
  end
25
24
  ```
25
+ 次にboolean型のフィールドの中身を更新するためのコードをrailsコンソールで試してみました。
26
26
  trueへの書き換えは、
27
27
  ```ryby
28
28
  Account.order(:id).each do |account|
@@ -30,10 +30,10 @@
30
30
  account.save
31
31
  end
32
32
  ```
33
- という風にすればでるのですが、
33
+ という風にすればbatch_flagのフィールドがtrue(データベース上はprocessing_onと表示)になるのですが、
34
- falseの場合、上記の書き方だとnullになってしまうらしく、not_null制約に引っかかってロールバックされて
34
+ falseの場合、上記の書き方だとnullになってしまうらしく、not_null制約に引っかかってロールバックされて更新することができません。
35
- 更新することができません。
36
- ```ryby
35
+ ```ruby
36
+ #失敗したコード。結果がnullになってしまう
37
37
  Account.order(:id).each do |account|
38
38
  account.batch_flag = false
39
39
  account.save
@@ -44,7 +44,7 @@
44
44
 
45
45
  ```
46
46
 
47
- どうすれば、boolean型のカラムをfalseに書き換えることができるのか、
47
+ **どうすれば、boolean型のフィールドをfalseに書き換えることができるのか**
48
48
  教えて頂ければ幸いです。
49
49
 
50
50
 

2

タイトル修正

2018/03/25 03:12

投稿

zendendo
zendendo

スコア43

title CHANGED
@@ -1,1 +1,1 @@
1
- rails(mysql)にboolean型を追加したけど、更新するとnullになってしまう
1
+ rails(mysql)に追加したboolean型フィールドをfalseに更新しようとするとnullになってしまう
body CHANGED
File without changes

1

エラー文の追加

2018/03/25 03:02

投稿

zendendo
zendendo

スコア43

title CHANGED
File without changes
body CHANGED
@@ -33,7 +33,17 @@
33
33
  という風にすればできるのですが、
34
34
  falseの場合、上記の書き方だとnullになってしまうらしく、not_null制約に引っかかってロールバックされて
35
35
  更新することができません。
36
+ ```ryby
37
+ Account.order(:id).each do |account|
38
+ account.batch_flag = false
39
+ account.save
40
+ end
36
41
 
42
+ #エラーメッセージ
43
+ ActiveRecord::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
44
+
45
+ ```
46
+
37
47
  どうすれば、boolean型のカラムをfalseに書き換えることができるのか、
38
48
  教えて頂ければ幸いです。
39
49