ユーザーの編集ができるようにしたい
現在ユーザーのプロフィールの編集機能を作成しているのですが、編集画面に遷移しない原因と編集後にユーザーの情報がアップデートされない原因が掴めずにいます。
お忙しいところ大変恐縮ですが、解決に至るヒントや原因などをご教授願えますでしょうか、、
発生している問題・エラーメッセージ
エラーなどは表示されておりませんが、ユーザーの情報を更新すると情報がデータが変わらない状況です。
また、現在ログインしているユーザーのみが編集できるようにしており、他のユーザーのプロフィールを編集できないように制限をかけたところ、編集ページに遷移できないようになりました。
該当のソースコード
app/cotrollers/users_controller
controller
1class UsersController < ApplicationController 2 def show 3 @user = User.find(params[:id]) 4 end 5 6 def edit 7 @user = User.find(params[:id]) 8 if current_user.id != @user 9 redirect_to root_path 10 end 11 end 12 13 def update 14 @user = User.find(params[:id]) 15 if @user.valid? 16 @user.update(user_params) 17 redirect_to user_path(current_user.id) 18 else 19 render :edit 20 end 21 end 22 23 private 24 25 def user_params 26 params.require(:user).permit(:name, :profile, :avatar) 27 end 28end 29
app/views/users/show.html.erb
erb
1<%= render "shared/header" %> 2 3<div class="top-container"> 4 <div class="user-content"> 5 <div class="user-content__main"> 6 <div class="user-content__img"><%= image_tag @user.avatar, class: "user-img" %></div> 7 <div class="user-content__name"><%= @user.name %></div> 8 <div class="user-content__link"><%= link_to "プロフィール編集", edit_user_path(current_user.id), class: "user-link"%></div> 9 </div> 10 <div class="user-profile"> 11 <h2 class="user-profile__title">プロフィール</h2> 12 <div class="user-profile__name"><%= @user.profile %></div> 13 </div> 14 </div> 15 <div class="user-wrapper"> 16 <div class="user-wrapper__title"><%= "#{@user.name}さんのおすすめカフェ一覧" %></div> 17 <div class="table"> 18 <%= render partial: "shared/upload", collection: @user.uploads %> 19 </div> 20 </div> 21</div> 22
app/views/users/edit.html.erb
erb
1<%= render "shared/header" %> 2 3<div class="edit"> 4 <div class="edit__main"> 5 <div class="edit__left"> 6 <h2>Edit Profile</h2> 7 <h5>プロフィール編集画面</h5> 8 </div> 9 <div class="edit__right"> 10 <%= form_with model: current_user, url: user_path, local: true do |f| %> 11 <%#= render "devise/shared/error_messages", resource: resource %> 12 13 <div class="edit__field"> 14 <%= f.label :name %><br/> 15 <%= f.text_field :name, autofocus: true, autocomplete: "name" %> 16 </div> 17 18 <div class="edit__field"> 19 <%= f.label :profile %><br/> 20 <%= f.text_area :profile, autofocus: true, autocomplete: "profile",rows: "5", maxlength: "300" %> 21 </div> 22 23 <div class="edit__footer"> 24 <div class="edit__text"> 25 アイコン画像 26 </div> 27 <div class="edit__upload"> 28 <p> 29 Click to upload file 30 </p> 31 <%= f.file_field :avatar, id: "edit-image" %> 32 </div> 33 </div> 34 35 <div class="edit__actions"> 36 <%= f.submit "Edit Profile"%> 37 </div> 38 <% end %> 39 40 <%= link_to "Back", :back %> 41 42 </div> 43 </div> 44</div>
app/config/routes.rb
route
1Rails.application.routes.draw do 2 devise_for :users 3 get 'uploads/index' 4 root to: "uploads#index" 5 resources :uploads 6 resources :users, only: [:show, :edit, :update] 7end
app/models/user.rb
ruby
1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 has_many :uploads 8 has_one_attached :avatar 9 with_options presence: true do 10 validates :email 11 validates :password, format: {with:/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i, message: "is invalid. Include both letters and numbers. Input half-width characters." } 12 validates :name 13 validates :profile, length: { maximum: 300} 14 validates :avatar 15 end 16end 17
試したこと
・コントローラーのedit
、update
で
def
1 @user = User.find(params[:id]) 2 if current_user.id != @user 3 redirect_to root_path 4 end 5 end
と記述して、条件分岐をするようにしたが、編集ページに遷移できないようになってしまった。
一度、条件分岐を切り離して、編集自体ができるか確認してみたところ、params
の取得はできているが、データが更新されないことがわかった。
ruby
1 13: def update 2 14: @user = User.find(params[:id]) 3 => 15: binding.pry 4 16: if @user.update(user_params) 5 17: redirect_to user_path(current_user.id) 6 18: else 7 19: render :edit 8 20: end 9 21: end 10 11 params 12=> #<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"nb5nlpahgaNruYVvgf52kxArsFN-rVosdXCCOG1uApeXw9cqlRvkhyD_PmCVuBj1iOqU28dn4-Hh5zrfm-Riag", "user"=>{"name"=>"yuu00", "profile"=>"カフェ巡りが", "avatar"=>#<ActionDispatch::Http::UploadedFile:0x00007f93289a8860 @tempfile=#<Tempfile:/var/folders/gw/k3mqyqh15y37h56g1b17ymvc0000gn/T/RackMultipart20210526-14898-uuwj6j.png>, @original_filename="初心者でも使用て開発ツール3選.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"user[avatar]\"; filename=\"\xE5\x88\x9D\xE5\xBF\x83\xE8\x80\x85\xE3\x81\xA6\xE3\x82\x99\xE3\x82\x82\xE4\xBD\xBF\xE7\x94\3\x81\xA6\xE3\x82\x99\xE3\x81\x8D\xE3\x82\x8B\xE3\x82\xA2\xE3\x83\x95\xE3\x82\x9A\xE3\x83\xAA\xE9\x96\x8B\xE7\x99\xBA\xE3\x83\x84\xE3\x83\xBC\xE3\x83\xAB3\xE9\x81\xB8.png\"\r\nContent-Type: image/png\r\n">}, "commit"=>"Edit Profile", "controller"=>"users", "action"=>"update", "id"=>"1"} permitted: false> 13
補足情報(FW/ツールのバージョンなど)
開発環境
・rubymine
・ruby(3.0.1)
・Ruby on rails (6.1.3.1)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/26 09:48
2021/05/26 09:55
2021/05/26 10:06
2021/05/26 11:40
2021/05/26 12:01
2021/05/26 12:58
2021/05/26 15:33
2021/05/27 04:29
2021/05/27 06:25
2021/05/27 07:19
2021/05/27 07:46
2021/05/27 07:49
2021/05/27 07:53
2021/05/27 07:56
2021/05/27 08:05
2021/05/27 08:39
2021/05/27 10:35