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

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

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

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

Q&A

1回答

140閲覧

Rails saveができません

Kassy11

総合スコア26

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/03/02 14:45

編集2022/01/12 10:55

Rails 5.2.2でユーザの新規登録の後、編集をする機能を作成しています
新規登録はでき、編集画面でユーザ名とメアドは表示されるのですが、編集をしてその編集を保存しようとすると、編集画面にリダイレクトされ保存が完了しません。
またbinding.pryを用いてデバッグしてもコンソールで変数の中身が表示されません。

edit.html.erb

1<h1>ユーザ編集画面</h1> 2<%= form_tag("/users/#{@user.id}/update", {multipart: true}) do %> 3 <p>ユーザー名</p> 4 <input name="name" value="<%= @user.name %>"> 5 <p>画像</p> 6 <input name="image" type="file"> 7 <p>メールアドレス</p> 8 <input name="email" value="<%= @user.email %>"> 9 <p>サークル名</p> 10 <input name="club"> 11 <p>入学年度</p> 12 <input name="entry_year"> 13 <p>自己紹介文</p> 14 <textarea name="content" rows="8" cols="80"></textarea> 15 <input type="submit" value="保存"> 16<% end %> 17

users_controller

1 def edit 2 @user = User.find_by(id: params[:id]) 3 end 4 5 def update 6 @user = User.find_by(id: params[:id]) 7 @user.name = params[:name] 8 @user.email = params[:email] 9 @user.password = params[:password] 10 @user.content = params[:content] 11 @user.club = params[:club] 12 @user.entry_year = params[:entry_year] 13 14 if params[:image] 15 @user.image_name = "#{@user.id}.jpg" 16 image = params[:image] 17 File.binwrite("public/user_images/#{@user.image_name}", image.read) 18 end 19 20 @user 21 binding.pry 22 if @user.save 23 flash[:notice] = "ユーザー情報を編集しました" 24 redirect_to("/users/#{@user.id}") 25 else 26 render("users/edit") 27 flash[:notice] = "編集できていません" 28 end
From: C:/Users/Kotaro/Desktop/kitoff/app/controllers/users_controller.rb @ line 48 UsersController#update: 31: def update 32: @user = User.find_by(id: params[:id]) 33: @user.name = params[:name] 34: @user.email = params[:email] 35: @user.password = params[:password] 36: @user.content = params[:content] 37: @user.club = params[:club] 38: @user.entry_year = params[:entry_year] 39: 40: 41: if params[:image] 42: @user.image_name = "#{@user.id}.jpg" 43: image = params[:image] 44: File.binwrite("public/user_images/#{@user.image_name}", image.read) 45: end 46: 47: @user => 48: binding.pry 49: if @user.save 50: flash[:notice] = "ユーザー情報を編集しました" 51: redirect_to("/users/#{@user.id}") 52: else 53: render("users/edit") 54: flash[:notice] = "編集できていません" 55: end 56: 57: end [1] pry(#<UsersController>)> @user

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

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

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

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

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

nskydiving

2019/03/02 23:15

問題の箇所は分かっているのでしょうか?(@user.save が失敗している?) それが分かっているのであれば、問題の箇所とデバッグの結果を質問欄に追記してください。
guest

回答1

0

またbinding.pryを用いてデバッグしてもコンソールで変数の中身が表示されません。

@user の値が入っていないようなので、以下のメソッドが期待通りに動作していないことが疑われます。

@user = User.find_by(id: params[:id])

  1. params[:id] の値が何なのか?
  2. もし params[:id] に期待した値が入っていなければ、View 側ではどう渡しているのか?

という感じで、順を追ってデバッグしてみてください。

投稿2019/03/03 02:21

nskydiving

総合スコア6500

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問