前提・実現したいこと
閲覧していただき、ありがとうございます。
現在、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
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。