初歩的な質問かも知れませんがお知恵を拝借させてください。
Ruby on Rails を使って簡単なウェブアプリケーションを作成しています。
ユーザーの身体情報を編集する機能を実装しているのですが下の部分でupdateできず、undefined method 'each_key' for #<ActionController::Parameters:0x00007f9bda024c20>
とエラーが出ます。
エラーでは@user.update_columns(user_params)
の部分で処理が止まっています。
calcalos_controller
1 2class CalcalosController < ApplicationController 3 before_action :alert_account, raise: false 4 5 def edit 6 @user = current_user 7 end 8 9 def update 10 @user = current_user 11 @user.update_columns(user_params) 12 flash[:notice] = "身体データを登録しました。" 13 redirect_to userinfo_path 14 end 15 16 private 17 def user_params 18 params.require(:user).permit(:tall, :age, :gendar, :active_level, :recom_calorie) 19 end 20end 21
試したこと
binding.pryで該当部分を調べてみました。
paramsやuser_paramsには想定したとおりの値が入っており、なぜupdateできないのか分かりませんでした。
8: def update 9: @user = current_user => 10: binding.pry 11: @user.update_columns(user_params) 12: flash[:notice] = "身体データを登録しました。" 13: redirect_to userinfo_path 14: end [1] pry(#<CalcalosController>)> @user => #<User:0x00007f9bd74171c8 id: 5, username: "太郎", email: "example@gmail.com", password_digest: "$2a$10$MoCSdaIutpXU09PdIeHuv.5QN/uR8mes5jVoiQvWqWk71vW3izHpO", tall: nil, age: nil, gendar: nil, active_level: nil, recom_calorie: nil, admin: false, image: nil, ate_recrod_id: nil, created_at: Tue, 28 May 2019 17:25:46 JST +09:00, updated_at: Tue, 28 May 2019 22:56:46 JST +09:00, remember_digest: nil, activation_digest: "$2a$10$7XdHMPWdWmSSnBkv/IMi6uxCZifGHbRbrqeG1N/5hb1RE9GPCNaja", activation: true, activation_at: Tue, 28 May 2019 17:27:19 JST +09:00, reset_digest: "$2a$10$/FVSN4LDYx8D4kOP2mdWl.P69q4yB0NezP7FGxNOAtJlT8djm.gSK", reset_sent_at: Tue, 28 May 2019 22:54:43 JST +09:00> [2] pry(#<CalcalosController>)> user_params => <ActionController::Parameters {"tall"=>"164", "age"=>"25", "gendar"=>"man", "active_level"=>"2.0", "recom_calorie"=>"2840"} permitted: true> [3] pry(#<CalcalosController>)> @user.update_columns(user_params) NoMethodError: undefined method `each_key' for #<ActionController::Parameters:0x00007f9bd7d84ff8> Did you mean? each_pair from /Users/seiyatakada/Dropbox/calosee/vendor/bundle/ruby/2.5.0/gems/activerecord-5.2.2/lib/active_record/persistence.rb:470:in `update_columns' [4] pry(#<CalcalosController>)> params => <ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"3gmSGO3n8tVNfwFbUd0JsvXj4fVzjJn3TYOV7nEb08lJHOEyAeDqrzNJ5voBMc6cF1/5sO/9UitzYvjn5LB96Q==", "user"=><ActionController::Parameters {"tall"=>"164", "age"=>"25", "gendar"=>"man", "active_level"=>"2.0", "recom_calorie"=>"2840"} permitted: false>, "commit"=>"このデータで登録する", "controller"=>"calcalos", "action"=>"update", "id"=>"5"} permitted: false>
補足情報
ruby: 2.5.3p105
rails: 5.2.2
devise: 4.6.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/31 03:21