前提・実現したいこと
Rails初学者です。
現在Railsにて、スポーツの練習相手をマッチングさせるアプリを作成中です。
スポーツイベントの詳細ページから、ユーザーは参加予定の宣言ができて、参加予定のユーザ,ー同士をマッチングさせる機能を実装したいです。
・event
・user
・event_user
上記の、3テーブルをアソシエーションさせて、userがeventに参加予定の場合は、event_userテーブルにuser_idとevent_idが保存されるようにしたいのですが、form_forからうまく保存させることができず、解決ができません。(consoleからは入力可能です)
発生している問題・エラーメッセージ
ActionController::ParameterMissing in EventsController#update param is missing or the value is empty: event
該当のソースコード
app/views/events/show.html.haml
haml
1%div.event_detail 2 %div.event_detail__title 3 イベント詳細 4 = image_tag @event.image.url, class: "event_detail__image" 5 %div.event_detail__info_box 6 %ul.event_detail__info_box--list 7 %li.event_detail__info_box--name 8 = @event.name 9 %li.event_detail__info_box--text 10 日にち : 11 = @event.date 12 %li.event_detail__info_box--text 13 開始時間: 14 = @event.time 15 %li.event_detail__info_box--text 16 場所 : 17 = @event.place 18 %div.event_detail__join_btn 19 = form_for @event do |f| 20 = hidden_field_tag :id, @event.id 21 = hidden_field_tag :user_ids, current_user.id 22 = f.submit "参加する"
app/config/routes.rb
Rails.application.routes.draw do root "events#index" devise_for :users resources :users do member do get :following, :followers end end resources :relationships, only: [:create, :destroy] resources :events, only: [:index, :new, :create, :show, :update] resources :matching, only: [:index] get '/user/like', to: 'matching#like', as: :like get '/user/liked', to:'matching#liked', as: :liked end
app/controllers/event_controller.eb
class EventsController < ApplicationController def index @events = Event.all.order(date: :asc) end def new @events = Event.new @events.users << current_user end def create @event = Event.new(event_params) if @event.save redirect_to root_path else render :new end end def show @event = Event.find(params[:id]) end def edit @event = Event.find(params[:id]) end def update @event = Event.find(params[:id]) @event.update(event_params) end private def event_params params.require(:event).permit(:image, :name, :date, :time, :place, user_ids: []) end end
app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_many :event_users, dependent: :destroy has_many :events, through: :event_users has_many :active_relationships, class_name: "Relationship", foreign_key: "follower_id", dependent: :destroy has_many :passive_relationships, class_name: "Relationship", foreign_key: "following_id", dependent: :destroy has_many :following, through: :active_relationships has_many :followers, through: :passive_ralationships, source: :follower def following?(other_user) following.include?(other_user) end def matchers User.where(id: passive_relationships.select(:follower_id)) .where(id: active_relationships.select(:following_id)) end end
app/models/event.rb
class Event < ApplicationRecord mount_uploader :image, ImageUploader has_many :event_users, dependent: :destroy has_many :users, through: :event_users end
app/models/event_user.rb
class EventUser < ApplicationRecord belongs_to :event belongs_to :user end
試したこと
エラー文より、paramsに情報が入っていないのかと思い、binding.pryをしてみたのですが、paramsには情報が入っているようでした。
34: def event_params => 35: binding.pry 36: params.require(:event).permit(:image, :name, :date, :time, :place, user_ids: []) 37: end [1] pry(#<EventsController>)> params => <ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"Mz6cqDHZDv3l5pYCDJBSOOWSJfVGmzQYMeiotdxesa54ltJTO/hufo8pdnwuJS7253VSS/orOo6MXfs/WyU2lA==", "id"=>"17", "user_ids"=>"13", "commit"=>"参加する", "controller"=>"events", "action"=>"update"} permitted: false>
補足情報(FW/ツールのバージョンなど)
rails 5.2.3
ruby 2.5.1
ユーザー登録はdeviseを使っています
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/13 07:54 編集
2020/01/13 08:01
2020/01/13 08:52