前提・実現したいこと
Ruby on Railsでアプリケーションを作っています。
その中で、avatarを設定する箇所を作っているのですが、そこでエラーが発生してしまいます。
avatarは設定してもしなくてもよいようにしたいので、設定を必須にする形にはできません。
なにとぞご助力を願いたく思います。
発生している問題・エラーメッセージ
ActiveRecord::NotNullViolation (Mysql2::Error: Column 'avatar' cannot be null: INSERT INTO `accounts` (`nickname`, `avatar`, `user_id`, `created_at`, `updated_at`) VALUES ('nickname', NULL, 1, '2019-08-21 08:09:56', '2019-08-21 08:09:56')):
該当のソースコード
migration
1class CreateAccounts < ActiveRecord::Migration[5.2] 2 def change 3 create_table :accounts do |t| 4 t.string :nickname, null: false, default: "" 5 t.string :avatar, null: false, default: "" 6 t.references :user, foreign_key: true 7 8 t.timestamps 9 end 10 end 11end
create
1 def create 2 @account = Account.new(create_params) 3 @account.user = current_user 4 binding.pry 5 unless @account.save 6 redirect_back(fallback_location: root_path) 7 end 8 end
binding
1# 上記binding.pry時 2[1] pry(#<AccountsController>)> @account 3=> #<Account:0x00007f5121f32310 4 id: nil, 5 nickname: "nickname", 6 avatar: "", 7 user_id: 1, 8 created_at: nil, 9 updated_at: nil> 10
INSERT
1 Account Create (1.1ms) INSERT INTO `accounts` (`nickname`, `avatar`, `user_id`, `created_at`, `updated_at`) VALUES ('nickname', NULL, 1, '2019-08-21 08:09:56', '2019-08-21 08:09:56')
試したこと
migrationファイルのnull: false
とdefault: ""
の順番の入れ替えや、上記掲載情報の確認などはてみましたが、上記以外のエラーは確認できませんでした。
…defaultを空文字に設定している時には、INSERTがNULLでもカラムには空文字が入ると考えていたのですが、その認識が間違っているのでしょうか?
別のアプリケーションでは同じようなやり方で動いていたのですが…。
ご指導のほど、よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
ruby: 2.6.3
rails: 5.2.3
mysql2: 0.5.2
gem: carrierwave (追記)
追記
モデルの内容は以下の通りです。
account
1class Account < ApplicationRecord 2 # relationship 3 belongs_to :user 4 5 # validation 6 validates :nickname, presence: true 7 validates :user_id, presence: true 8 9 # for avatar upload 10 mount_uploader :avatar, AvatarUploader 11end
このカラムではcarrierwaveを利用しているんですが、これが悪さをしているのでしょうか?
binding
1[4] pry(#<AccountsController>)> @account.avatar 2=> #<AvatarUploader:0x00007f6892de3710 3 @cache_id=nil, 4 @file=nil, 5 @filename=nil, 6 @identifier=nil, 7 @model= 8 #<Account:0x00007f68935e8190 9 id: nil, 10 nickname: "nickname", 11 avatar: "", 12 user_id: 1, 13 created_at: nil, 14 updated_at: nil>, 15 @mounted_as=:avatar, 16 @staged=false, 17 @versions=nil> 18[5] pry(#<AccountsController>)> @account.avatar.blank? 19=> true 20[6] pry(#<AccountsController>)> @account.avatar.nil? 21=> false
回答2件
あなたの回答
tips
プレビュー