質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

2回答

1563閲覧

userとgroupのidを中間テーブルに保存したい。

zoomer

総合スコア1

Ruby

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

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/11/05 03:18

前提・実現したいこと

閲覧していただき、ありがとうございます。

現在、mixiのコミュニティーのような機能のアプリを作成しております。(グループの作成、グループへの参加、グループ内でのチャット機能など)

仕様としては、groupが作成された段階ではユーザーは一人(作成者のみ)で、あとからログインしたユーザーがグループに参加することができるというものです。

現状とそこから立てた仮説

ユーザーとグループは多対多の関係であるため中間テーブルが必要で、グループ作成時のフォームと、メンバーが参加するためのフォームの両方から中間テーブルに情報が送られて、user_idとgroup_idが保存される必要があると考えました。

グループ作成機能を実装した所、groupは保存されましたが、user_idとgroup_idは中間テーブルに保存されませんでした。

そこで、useの情報が送られていないと考え、group作成の情報を送るgroups/new.html.erbと情報を受け取るGroupsControllerのストロングパラメーターの設定が間違っていると考えました。

現状はgroup作成フォームのコードを編集しており、下記のエラーが起こっております。

error

1NameError in Groups#new 2 3Extracted source (around line #39): 437 <div class='chat-room-form__field--right'> 538 <select name="room[user_ids][]"> 639 <option value=<%= user.id %>></option> 740 </select> 841 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 942 </div>

Parameters:
None

と記載されているので、user_idが送られていないのだと思います。

この状態から user_idを送るにはどこを編集すればよろしいでしょうか?

また、どこのコードがおかしいか教えて頂けますでしょうか。

よろしくお願い致します。

関連のコード

view

1#groups/new.html.erb 2 3<div class='chat-room-form'> 4 <h1>新規グループ作成</h1> 5 <%=form_with model: @group, local: true do |f|%> 6 <div class='group-form__field'> 7 <div class='group-room-form__field--left'> 8 <%= f.label :グループ名, class: 'group-room-form__label'%> 9 </div> 10 <div class='group-room-form__field--right'> 11 <%= f.text_field :name, class: 'group__room_name group-room-form__input', placeholder: 'グループ名を入力してください'%> 12 </div> 13 <div class="group-room-form__field--left"> 14 <%= f.label :image, "グループアイコン" %><br /> 15 <%= f.file_field :image %> 16 </div> 17 <div class='group-room-form__field--left'> 18 <%= f.label :カテゴリー, class: 'group-room-form__label'%> 19 </div> 20 <div class='group-room-form__field--right'> 21 <%= f.collection_select(:category_id, Category.all, :id, :name, {}, {class:"group-select"}) %> 22 </div> 23 <div class='group-room-form__field--left'> 24 <%= f.label :ジャンル, class: 'group-room-form__label'%> 25 </div> 26 <div class='group-room-form__field--right'> 27 <%= f.collection_select(:genre_id, Genre.all, :id, :name, {}, {class:"group-select"}) %> 28 </div> 29 <div class='group-room-form__field--left'> 30 <%= f.label :グループ説明, class: 'group-room-form__label'%> 31 </div> 32 <div class='group-room-form__field--right'> 33 <%= f.text_field :text, class: 'group__room_name group-room-form__input', placeholder: 'どんなグループ?'%> 34 </div> 35 36 <%# user_idを送るための記述 %> 37 <div class='chat-room-form__field--right'> 38 <select name="room[user_ids][]"> 39 <option value=<%= user.id %>></option> 40 </select> 41 <input name="room[user_ids][]" type="hidden" value=<%= current_user.id %>> 42 </div> 43 <%# //user_idを送るための記述 %> 44 45 46 </div> 47 <div class='group-form__field'> 48 <div class='group-form__field--left'></div> 49 <div class='group-form__field--right'> 50 <%= f.submit class: 'group-form__action-btn'%> 51 </div> 52 </div> 53 <% end %> 54</div>

controller

1class GroupsController < ApplicationController 2 3 def new 4 @group = Group.new 5 @group.users << current_user 6 end 7 8 def index 9 @groups = Group.all 10 @groups = Group.order("created_at DESC") 11 end 12 13 def create 14 @group = Group.new(group_params) 15 if @group.save 16 redirect_to root_path 17 else 18 render :new 19 end 20 end 21 22 private 23 24 def group_params 25 params.require(:group).permit(:name, :text, :category_id, :genre_id, :image, user_ids: []) 26 end 27 28end

model

1#groupmodel 2 3class Group < ApplicationRecord 4 extend ActiveHash::Associations::ActiveRecordExtensions 5 6 belongs_to :category 7 belongs_to :genre 8 9 has_many :group_users 10 has_many :users, through: :group_users, dependent: :destroy 11 accepts_nested_attributes_for :group_users 12 has_many :messages, dependent: :destroy 13 14 has_one_attached :image 15 16 with_options presence: true do 17 validates :name, uniqueness: true 18 validates :text 19 validates :category_id 20 validates :genre_id 21 end 22 23 with_options numericality:{other_than: 1} do 24 validates :category_id 25 validates :genre_id 26 end 27 28end

model

1#GroupUsersModel 2 3class GroupUser < ApplicationRecord 4 belongs_to :group 5 belongs_to :user 6end

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

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

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

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

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

guest

回答2

0

<%# user_idを送るための記述 %> のところにある
user.id のuserとは、Userモデルにあるユーザ全員(かもしくは何らかの条件で絞り込んだ)の一覧を出したいのではないですか?
options_from_collection_for_select というhelper method を調べてください

投稿2020/11/05 08:29

winterboum

総合スコア23333

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

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

0

ベストアンサー

user_idを送るための記述部分がフォームと紐づいていないため、パラメータが送られていない状態です。

フォームをネストさせる記述は以下が参考になると思います。

https://qiita.com/sibakenY/items/49754667addb39076094

また、パラメータもネストさせる場合はストロングパラメータの記述の仕方も変わってきますので、以下を参考にどうぞ。

https://qiita.com/kymmt90/items/4ce8618ca8f537b2ef7e

投稿2020/11/05 05:32

hukurouo

総合スコア108

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

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

zoomer

2020/11/05 08:08

ご回答ありがとうございます。 https://qiita.com/sibakenY/items/49754667addb39076094 こちらの記事に記載されている accepts_nested_attributes_for : につきましては、groupモデルに記載済みでした。 また、ストロングパラメーターにつきましては、配列での記載をしておりました。 現状では、formでの送り方に問題があるというあたりを付けておりまして、改めてそちらを中心に仮説を立ててみます。 ご指摘ありがとうございます。
hukurouo

2020/11/05 08:28

<%= f.fields_for :posts do |m| %> <%= m.label :body %> <%= m.text_area :body %> <% end %> のように、f.field_for を用いると上手くいくと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問