🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1010閲覧

Room情報がDBに保存されません

8083Kanegon

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/03/17 10:26

前提・実現したいこと

チャットアプリを作ろうとしています。
しかし保存をしようと中間テーブルのroom_usersテーブルだけではなくRoomテーブルにも保存されません。
なので両テーブルに保存されるようにしたいです。(エラーメッセージは出ていません。)

該当ソースコード

Ruby

1**rooms_controller.rb** 2 3class RoomsController < ApplicationController 4 def index 5 @rooms = Room.all.order("created_at DESC") 6 end 7 8 9 def show 10 @room = Room.find(params[:id]) 11 @messages = @room.messages.includes(:user).order(:id).last(100) 12 @message = current_user.messages.build 13 end 14 15 def new 16 @room = Room.new 17 end 18 19 def create 20 # binding.pry 21 @room = Room.new(room_params) 22 if @room.save 23 redirect_to root_path 24 else 25 render :new 26 end 27 end 28 29 private 30 31 def room_params 32 params.require(:room).permit(:name, user_ids: []) 33 end 34 35end

Ruby

1**room.rb** 2 3class Room < ApplicationRecord 4 has_many :room_users 5 has_many :users, through: :room_users 6 has_many :messages 7end

Ruby

1**user.rb** 2 3class User < ApplicationRecord 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 has_many :room_users 7 has_many :rooms, through: :room_users 8 has_many :messages 9 10 validates :profile, length: {maximum: 200} 11 12 with_options presence: true do 13 validates :nickname 14 validates :password, format: {with: /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{6,}+\z/i} 15 end 16end

Ruby

1**room_user.rb** 2 3class RoomUser < ApplicationRecord 4 belongs_to :room 5 belongs_to :user 6end

HTML

1**room/new.html.erb** 2 3<%= form_with model: @room, local: true do |f| %> 4 <%= f.label :name, "チャットルーム名" %><br /> 5 <p><%= f.text_field :name %></p> 6 <select name="room[user_ids][]"> 7 <option>チャットするユーザーを選んでください</option> 8 <% User.where.not(id: current_user.id).each do |user| %> 9 <option value=<%= user.id %>><%= user.nickname %></option> 10 <% end %> 11 </select> 12 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 13 <p><%= f.submit "ルームの作成" %><p> 14 <% end %>

試したこと

binding.pryで止め、params内の確認。
######結果
[1] pry(#<RoomsController>)> params => <ActionController::Parameters {"authenticity_token"=>"8+oW0YsPTtpMzAPxhc3cUL8QFM3z7UibGQBNNRnQ9zVTg7QSd/4Fz6LrwMRaTZBjyWjfcHuvatXh+VJZ333p9w==", "room"=>{"name"=>"新規チャットルーム", "user_ids"=>["1", "2"]}, "commit"=>"ルームの作成", "controller"=>"rooms", "action"=>"create"} permitted: false>
room_paramsの中身確認
######結果
[2] pry(#<RoomsController>)> room_params => <ActionController::Parameters {"name"=>"新規チャットルーム", "user_ids"=>["1", "2"]} permitted: true>

補足情報

Ruby 2.6.5
Rails 6.0.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Userのバリデーションが悪戯をしており、バリデーションで弾いていました。
なぜRoom作成でUserのバリデーションが反応していたのかはわからないのでわかる方教えてください!

Ruby

1**room.rb** 2 3class Room < ApplicationRecord 4 has_many :room_users 5 has_many :users, through: :room_users, validate: false#追加 6 has_many :messages 7 8 validates :name, presence: true 9end

投稿2021/03/18 10:43

8083Kanegon

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Userのバリデーションが悪戯をしており、バリデーションで弾いていました。
なぜRoom作成でUserのバリデーションが反応していたのかはわからないのでわかる方教えてください!

Ruby

1**room.rb** 2 3class Room < ApplicationRecord 4 has_many :room_users 5 has_many :users, through: :room_users, validate: false#追加 6 has_many :messages 7 8 validates :name, presence: true 9end

投稿2021/03/18 10:37

8083Kanegon

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

Userのバリデーションが悪戯をしており、バリデーションで弾いていました。
なぜRoom作成でUserのバリデーションが反応していたのかはわからないのでわかる方教えてください!

Ruby

1**room.rb** 2 3class Room < ApplicationRecord 4 has_many :room_users 5 has_many :users, through: :room_users, validate: false#追加 6 has_many :messages 7 8 validates :name, presence: true 9end

投稿2021/03/18 10:19

8083Kanegon

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問