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

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

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

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

Q&A

解決済

1回答

1348閲覧

【Rails】ユーザー情報編集後、データーベースに保存できない

shiiishim_920

総合スコア2

Ruby on Rails

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

0グッド

0クリップ

投稿2021/06/28 08:34

初心者です。

■解決したいこと
ユーザー情報を編集し保存できない件を解決したいです。

■現状

  • deviseを用いた実装をしてる。
  • ユーザー情報の編集機能においては、usersコントローラーを生成しそちらで処理を実行しようと考えている。

■検証したこと

  • binding.pryを使い「update」を実行した際、paramsに情報が格納されているかを確認。

下記の情報が格納されているためビューの問題ではないと判断。

<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"K8QyDjr473gSjFjZDaHhDWuAc6eB4BAtK5WW5YLbwDGBNN/Cj61A5xAm/NGVNE+ASsOn8Vm0/Zs1yNUtJ1gEyw==", "user"=>{"nickname"=>"なおこ", "email"=>"ppp@ppp"}, "commit"=>"Update", "controller"=>"users", "action"=>"update", "id"=>"4"} permitted: false>

ここまで考えましたが、この先の解決策がわからないためアドバイスをいただきたいです。
よろしくお願い致します。

■現在のソースコード

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "targets#index" 4 resources :users, only: [:edit, :update, :show] 5 resources :targets, only: [:new, :create, :show, :destroy] do 6 collection do 7 get 'memo' 8 end 9 resources :comments, only: :create 10 end 11end

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 validates :nickname, presence: true 8 PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze 9 validates_format_of :password, with: PASSWORD_REGEX, message: 'は半角英数字混合での入力が必要です' 10 11 has_many :targets 12 has_many :comments 13end 14

ruby

1class UsersController < ApplicationController 2 def edit 3 @user = User.find(params[:id]) 4 end 5 6 def update 7 binding.pry 8 @user = User.find(params[:id]) 9 if @user.update(user_params) 10 redirect_to @user 11 else 12 render 'edit' 13 end 14 end 15 16 def show 17 @user = User.find(params[:id]) 18 @targets = @user.targets 19 end 20 21 private 22 23 def user_params 24 params.require(:user).permit(:nickname, :email) 25 end 26end 27

ruby

1<div class='account-page' id='account-page'> 2 <div class="container"> 3 <div class=' account-page_header'> 4 <h3>アカウントの編集</h3> 5 </div> 6 7 <div class='user-form'> 8 <%= form_with model: @user, local: true do |f|%> 9 10 <div class='field'> 11 <div class='field-label'> 12 <%= f.label :nickname%> 13 </div> 14 <div class='field-input'> 15 <%= f.text_field :nickname, autofocus: true%> 16 </div> 17 </div> 18 19 <div class='field'> 20 <div class='field-label'> 21 <%= f.label :email%> 22 </div> 23 <div class='field-input'> 24 <%= f.email_field :email%> 25 </div> 26 </div> 27 28 <div class='actions'> 29 <%= f.submit "Update", class: 'btn'%> 30 </div> 31 32 <% end %> 33 </div> 34 </div> 35</div> 36

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

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

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

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

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

guest

回答1

0

ベストアンサー

validates_format_of :passwordによるバリデーションが更新時にも効いてしまっている、という可能性はないでしょうか?

パスワードは復元不能な形でデータベースに保管されますので、User.findで取ってきた後にはpasword列はnilとなっています。

投稿2021/06/28 08:50

maisumakun

総合スコア146018

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

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

shiiishim_920

2021/06/28 09:11 編集

ご返信をありがとうございました! ``` validates_format_of :password, with: PASSWORD_REGEX, message: 'は半角英数字混合での入力が必要です', on: :create ``` としたら、保存できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問