実現したいこと
ログイン中のユーザーが訪問した都道府県を登録できる機能を実装したい。(チェックボックス使用。)
前提
Ruby on Railsで旅行系アプリを作成中。
発生している問題・エラーメッセージ
ユーザーがログイン状態で都道府県チェックボックスにチェックを入れて更新ボタンを押すと「userのパラメータが空です」とメッセージが現れました。パラメータ内にはuserのid(=1)が含まれているので、問題なくユーザーIDがパラメータで送信されてきていると思ったのですが、ちゃんと情報が送れていないみたいです。
また、user_controllerのrequire(:user)の記述を削除すればエラーは消えるものの、更新してもデータは保存され無い状態です。
どのようにコードを記述すれば、現在ログイン中のユーザー情報と過去の旅行先情報を紐付けて保存できるか教えていただきたいです。初学者の為、至らない点が多々あると思いますが、ご教示の程宜しくお願いいたします。
error_message
該当のソースコード
routes.rb
1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'destinations#index' 4 resources :destinations, only: [:index, :new, :create, :update] 5 resources :users ,only: [:edit, :update] 6end
models/user.rb
1class User < ApplicationRecord 2 3 devise :database_authenticatable, :registerable, 4 :recoverable, :rememberable, :validatable 5 6 has_many :destinations 7 has_many :user_histories 8 has_many :users, through: :user_histories 9 10end
models/history.rb
1class History < ApplicationRecord 2 has_many :user_histories 3 has_many :histories, through: :user_histories 4end
models/user_history.rb
1class UserHistory < ApplicationRecord 2 belongs_to :user 3 belongs_to :history 4end
users_controller.rb
1class UsersController < ApplicationController 2 3 def edit 4 @user = current_user 5 end 6 7 def update 8 current_user.update(user_params) 9 flash[:success] = "旅行先を更新しました。" 10 redirect_to edit_user_path(current_user.id) 11 end 12 13 private 14 15 def user_params 16 params.require(:user).permit(history_ids: []) 17 end 18 19 20end
views/users/history.html.rb
1<div class="user-main"> 2 <div class="user-container"> 3 <div class="history"> 4 <h2>これまでの旅行先</h2> 5 </div> 6 <%= form_with model: @user, url: user_path(@user), method: :patch, local: true do |f| %> 7 <div class="prefecture-check-box"> 8 <div class="check-box-details"> 9 <%= collection_check_boxes :history, :history_ids, History.all, :id, :name, include_hidden: false do |history| %> 10 <%= history.check_box + history.text %> 11 <% end %> 12 </div> 13 </div> 14 <div class="save-btn"> 15 <%= f.submit "UPDATE", class: "update" %> 16 </div> 17 <% end %> 18 </div> 19</div>

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。