前提・実現したいこと
ユーザのログイン、ユーザ情報の編集画面を作っています。
ユーザ情報の編集をしたいです。
発生している問題・エラーメッセージ
エラーメッセージが表示されず、save成功後のメッセージが表示されます。
ユーザ情報を編集し、saveしたところ編集内容が反映されず、元々登録してあった情報も消えてしまいます。
具体的には、下記コードのuser_name, introの2カラムを編集すると、現在ログインしてあるユーザのuser_name, introが空になってしまいます。
エラーメッセージ
該当のソースコード
usersController
1def edit 2 @user = @current_user 3 end 4 5 def update 6 @user = @current_user 7 @user.user_name = params[:user_name] 8 @user.intro = params[:intro] 9 if params[:user_image] 10 @current_user.user_image = "#{@current_user.id}.jpg" 11 user_image = params[:user_image] 12 File.binwrite("public/images/user_images/#{@current_user.user_image}", image.read) 13 end 14 if @user.save! 15 16 redirect_to("/users/#{@current_user.id}") 17 flash[:notice] = "変更しました" 18 else 19 redirect_to("/users/#{@current_user.id}") 20 #render("users/#{@current_user.id}/edit") 21 flash[:notice] = "変更に失敗しました" 22 end 23 end 24 25 26
appligationController
1def set_current_user 2 @current_user = User.find_by(id: session[:user_id]) 3 end
edit.html.erb
<%= form_with model: @user, local:true, method: :patch do |f| %>
<div class"form-group">
<label>画像</label>
<%= f.file_field:user_image, class: "form-control" %>
</div>
<div class"form-group">
<label>ユーザ名</label>
<%= f.text_field:user_name, class: "form-control" %>
</div>
<div class"form-group">
<label>自己紹介</label>
<%= f.text_area:intro, class: "form-control" %>
</div>
<div class"form-group">
<%= f.submit "保存", class: "btn btn-primary" %>
</div>
<% end %>
### 試したこと saveをsave!にしたがエラーメッセージが表示されなかった。 saveをif文にして編集に成功したか試したが、編集されていないのに成功のメッセージが表示されてしまった。 byebugを使ってsave前後で@user, @current_user, paramsの値を確認した。 結果、@user, @current_userは同じ値が表示されたが。paramsはedit.html.erbで入力した内容と同じ内容が代入されていた。 save終了後の@user, @current_userはparamsが反映されていなかった。 ### 補足情報(FW/ツールのバージョンなど) rubyonrails, bootstrap, cloud9を使用しています。他に必要なファイル等あれば教えてください。 railsを勉強し始めて1ヶ月程度です。できる限り早く調べてご返信させていただきますのでどなたかご助言を頂きたく存じます。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/23 23:50
2021/07/24 01:56
2021/07/24 08:07