TransWikia.com

中間テーブル保存時にvalidationエラーが出てしまう

スタック・オーバーフロー Asked by r_n06 on December 11, 2020

前提・実現したいこと

Ruby on RailsでLINEのグループ機能のように、グループ名の入力とメンバーをドロップダウンで選択しグループを作成する機能を実装しています。
UserモデルとGroupモデル、中間テーブルにgroup_usersを設定しています。
groupモデルとgroup_usersテーブルに作成したグループ名、user_id、group_idを保存できるように実装したいのですが、エラーが出て詰まっています。

発生している問題・エラーメッセージ

コンソールでデータを保存しようとすると下記のエラーメッセージが出力されました。

[1] pry(main)> @group = Group.new(name: "group1", user_ids: [8, 9])
=> #<Group:0x00007fdec218cf38
 id: nil,
 name: "group1",
 created_at: nil,
 updated_at: nil>

[2] pry(main)> @group.save!
ActiveRecord::RecordInvalid: Validation failed: Users is invalid
from /Users/〇〇/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/validations.rb:80:in `raise_validation_error'

該当のソースコード

Userモデル

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  validates :nickname, presence: true
  PASSWORD_REGEX = /A(?=.*?[a-z])(?=.*?[d])[a-zd]+z/i.freeze
  validates_format_of :password, with: PASSWORD_REGEX

  has_many :group_users
  has_many :groups, through: :group_users
  has_many :comments
  has_one_attached :user_image
end

Groupモデル

class Group < ApplicationRecord
  validates :name, presence: true

  has_many :comments
  has_many :events
  has_many :group_users
  has_many :users, through: :group_users
end

group_usersテーブル

class GroupUser < ApplicationRecord
  belongs_to :group, optional: true
  belongs_to :user, optional: true
end

試したこと

validationエラーとなっていましたが、validationの設定を今回の実装に関してnameしかしていなかったので試しにGroupモデルのvalidationを削除してみましたが、変わりませんでした。
それ以外にvalidationに問題が見当たらなかったためモデルに関して調べたところ、中間テーブルに設定しているbelongs_toにoptionalというオプションがあることを知り、記述してみました。ですが、それでも出力結果は変わらずvalidationエラーになってしまうため息詰まってしまいました。
初心者なので基礎的なことになってしまいますが、お力をお貸しいただけるとありがたいです。不備があるかもしれませんが何卒よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

開発環境

Ruby : 2.6.5
Ruby on Rails : 6.0.0
DB : Mysql 5.6.47

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP