前提・実現したいこと
現在、チャットアプリの制作をしています。 その際にuserモデルとroomモデル間で中間テーブルを作成するのですが作成しビューを記載したのですがデータが保存できません。 原因として考えているのはuser情報にactive_hashを用いているため何かしらのバリデーションがかかってしまい保存ができないのではないかと考えています。
発生している問題・エラーメッセージ
エラーメッセージは特に出ていないためbinding.pryで止めた際のparamsの中身を貼らせていただきます
<ActionController::Parameters {"authenticity_token"=>"B6ucPoSy7PxPvfWFDecvHUfpuVg3v9zZhOMRzwUeSZGpzYJ1tH17M79Haho6L+WSEhQBTJoZI/a8FcFkfzTrGQ==", "room"=><ActionController::Parameters {"name"=>"2021年度 2年1組", "user_ids"=>["1", "4"]} permitted: false>, "commit"=>"Create Room", "controller"=>"rooms", "action"=>"create"} permitted: false> [2] pry(#<RoomsController>)> @room.save => false
該当のソースコード
room#new のビュー
ruby
1<div class='chat-room-form'> 2 <h1>新規チャットルーム</h1> 3 <%=form_with model: @room, local: true do |f|%> 4 <div class='chat-room-form__field'> 5 <div class='chat-room-form__field--left'> 6 <%= f.label :チャットルーム名, class: 'chat-room-form__label'%> 7 </div> 8 <div class='chat-room-form__field--right'> 9 <%= f.text_field :name, class: 'chat__room_name chat-room-form__input', placeholder: 'チャットルーム名を入力してください'%> 10 </div> 11 </div> 12 <div class='chat-room-form__field'> 13 </div> 14 <div class='chat-room-form__field'> 15 <div class='chat-room-form__field--left'> 16 <label class='chat-room-form__label' for='chat_room_チャットメンバー'>チャットメンバー</label> 17 </div> 18 <div class='chat-room-form__field--right'> 19 <select name="room[user_ids][]"> 20 <option value="">チャットするユーザーを選択してください</option> 21 <% User.where.not(id: current_user.id).each do |user| %> 22 <option value=<%= user.id %>><%= user.name %></option> 23 <% end %> 24 </select> 25 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 26 </div> 27 </div> 28 <div class='chat-room-form__field'> 29 <div class='chat-room-form__field--left'></div> 30 <div class='chat-room-form__field--right'> 31 <%= f.submit class: 'chat-room-form__action-btn'%> 32 </div> 33 </div> 34 <% end %> 35</div> 36
user.rb
class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable with_options presence: true do validates :name validates :status_id validates :group_id validates :password_confirmation end extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :group belongs_to :status has_many :room_users has_many :rooms, through: :room_users end
room.rb
class Room < ApplicationRecord has_many :room_users has_many :users, through: :room_users end
room_user.rb
class RoomUser < ApplicationRecord belongs_to :room belongs_to :user end
rooms_controller.rb
class RoomsController < ApplicationController def new @room = Room.new end def create @room = Room.new(room_params) if @room.save redirect_to root_path else render :new end end private def room_params params.require(:room).permit(:name, user_ids: []) end end
routes.rb
Rails.application.routes.draw do devise_for :users root to: 'messages#index' resources :rooms, only: [:new, :create] resources :messages end
room_user.rbのマイグレーションファイル
class CreateRoomUsers < ActiveRecord::Migration[6.0] def change create_table :room_users do |t| t.references :user, foreign_key: true t.references :room, foreign_key: true t.timestamps end end end
試したこと
userモデルのactive_hashに関係するアソシエーションの上に中間テーブルとのアソシエーションを書いたりしてみたのですが結果は保存されず変わりませんでした。
補足情報(FW/ツールのバージョンなど)
rails 6.0.0を使用しています
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。