質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

598閲覧

ユーザ情報の編集をしたいが、paramsが反映されず元のユーザデータが消えてしまう。

N-hiromi

総合スコア6

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/07/23 10:35

前提・実現したいこと

ユーザのログイン、ユーザ情報の編集画面を作っています。
ユーザ情報の編集をしたいです。

発生している問題・エラーメッセージ

エラーメッセージが表示されず、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ヶ月程度です。できる限り早く調べてご返信させていただきますのでどなたかご助言を頂きたく存じます。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@user.user_name = params[:user_name] の paramsが多分違うですね
@user.user_name = params[:user][:user_name] にしてみて。

それで駄目だったら、logから Paramaters の部分を確認するか
編集画面のhtml ソースをみて user_nameやinfoの name= を確認してください

投稿2021/07/23 22:54

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

N-hiromi

2021/07/23 23:50

ご指摘通りparams[:user][:user_name]に変更したら正しく編集を行うことができました。[:user]をparamsにつけないと取得できなかった理由についてはまた調べてみようと思います。昨日は半日かかっても修正できませんでした。ありがとうございます。勉強させていただきます。
winterboum

2021/07/24 01:56

logみる習慣つけましょう
N-hiromi

2021/07/24 08:07

ご助言ありがとうございます。logの見方についても勉強いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問