#解決したいこと
すでに存在しているユーザーのプロフィール情報を更新したい。
前提
ユーザーの登録にはdeviseをつかっています。
Ruby on Railsはバージョン6.0.0
データベースはMySQL
エラー文の内容
ローカルサーバーではエラーは出ていないのですが、更新がうまくいっていない状態です。
ターミナル
Started PATCH "/users/1" for ::1 at 2020-12-24 14:34:43 +0900 Processing by UsersController#update as HTML Parameters: {"authenticity_token"=>"TpUEG0NFoYeu4qsqHdhJ0ALkSWMGA5g1qENU2RB9lQEo4PqBEi4Hqwk5QJsxSj0gXZArsccdmCvhuNjrXNrqlA==", "user"=>{"nickname"=>"test", "description"=>"こんにちは", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00007f988f299aa8 @tempfile=#<Tempfile:/var/folders/5f/f5dbg2xd1x59jr7h0wrgvs9w0000gn/T/RackMultipart20201224-4854-1xhusl5.jpg>, @original_filename="1.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"1.jpg\"\r\nContent-Type: image/jpeg\r\n">}, "commit"=>"更新する", "id"=>"1"} User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/users_controller.rb:12:in `update' DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :email attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator. (called from update at /Users/etsuya/projects/fact-m-31640/app/controllers/users_controller.rb:13) (0.1ms) BEGIN ↳ app/controllers/users_controller.rb:13:in `update' User Exists? (0.2ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = BINARY 'test@test' AND `users`.`id` != 1 LIMIT 1 ↳ app/controllers/users_controller.rb:13:in `update' (0.1ms) ROLLBACK ↳ app/controllers/users_controller.rb:13:in `update' Rendering users/edit.html.erb within layouts/application Rendered users/edit.html.erb within layouts/application (Duration: 0.7ms | Allocations: 437) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 29ms (Views: 20.6ms | ActiveRecord: 0.9ms | Allocations: 19754)
form.html.erb
Ruby
1<%= form_with model: @post, local: true do |form| %> 2 <div class="content-title"> 3 <%= form.text_field :title, class:"form_title", placeholder:"タイトル" %> 4 </div> 5 <div class="content-tag"> 6 <p>tagが入ります</p> 7 </div> 8 <div class="content-text"> 9 <%= form.text_area :text, class:"form_text", placeholder:"音楽の知識や技術を共有しよう" %> 10 </div> 11 <div class="content-submit"> 12 <div class="right-content"> 13 <%= form.submit "投稿する", class:"form_submit"%> 14 </div> 15 </div> 16<% end %>
users.controllers.rb
class UsersController < ApplicationController def show @nickname = current_user.nickname @posts = current_user.posts end def edit @user = User.find(params[:id]) end def update @user = User.find(params[:id]) if @user.update(user_params) && @user.avatar.attach(params[:avatar]) redirect_to user_path(@user) else render :edit end end private def user_params params.require(:user).permit(:nickname, :description, :avatar) end end
application_controller
class ApplicationController < ActionController::Base before_action :authenticate_user!, except: [:index, :show] before_action :configure_permitted_parameters, if: :devise_controller? private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :avatar, :description]) devise_parameter_sanitizer.permit(:account_update, keys: [ :avatar, :nickname, :description]) end end
## 試してみたこと
パラメーターの受け渡しに問題があるのかと思い今一度deviseにおけるストロングパラメーターについてしらべてみたのですがよくわからず
updateがなぜできないのかかいけつできませんでした。
なぜupdateアクションでロールバックされているのか、原因と解決方ご存知の方はお力をお借りしたいです。
初学者なのでわかりやすくお願いいたします。
あなたの回答
tips
プレビュー