質問編集履歴
3
タイトル修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
rails(mysql)に追加したboolean型フィールド
|
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
|
-
```
|
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型の
|
47
|
+
**どうすれば、boolean型のフィールドをfalseに書き換えることができるのか**、
|
48
48
|
教えて頂ければ幸いです。
|
49
49
|
|
50
50
|
|
2
タイトル修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
rails(mysql)に
|
1
|
+
rails(mysql)に追加したboolean型フィールドをfalseに更新しようとするとnullになってしまう
|
body
CHANGED
File without changes
|
1
エラー文の追加
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
|
|