実現したいこと
railsのdevise機能でuser情報編集を作成したい
・パス編集(こちらは作成済み)
・その他の編集(こちらを作成したい)
分けたい
前提
user.controller.rbにアクション記述。
ルートもその通り記述
バリデーションでパス編集は除外しているように設定(しているつもり)
しかし、バリデーションにひっかかり困っている
発生している問題・エラーメッセージ
Password is invalid
該当のソースコード
rails
1ルーティング 2 3Rails.application.routes.draw do 4 devise_for :users, controllers: { 5 registrations: 'users/registrations' 6 } 7 8 root to: "cares#index" 9 10 resources :cares, only: [:index, :new, :create,:edit, :update ] do 11 collection do 12 get :lecture_new 13 post :lecture_create 14 end 15 member do 16 get :lecture_edit 17 patch :lecture_update 18 delete :lecture_delete 19 end 20 end 21 22 resources :users, only: [:show] do 23 member do 24 get :edit_other_info 25 patch :update_other_info 26 end 27 end 28end
rails
1user.rb 2 3 validates :password, format: { with: /\A(?=.*?[a-z])(?=.*?[\d])[a-z\d]+\z/i }, presence: true, on: :create 4 5 # edit_other_infoアクションでのみパスワードを無効にする 6 with_options on: :edit_other_info do |edit_user| 7 edit_user.validates :password, absence: true 8 edit_user.validates :password_confirmation, absence: true 9 end 10 11
rails
1コントローラー 2class UsersController < ApplicationController 3 4 def edit_other_info 5 @user = User.find(params[:id]) 6 end 7 8 def update_other_info 9 @user = User.find(params[:id]) 10 if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 11 @user.update_without_password(user_params) 12 else 13 @user.update_with_password(user_params) 14 end 15 16 if @user.errors.empty? 17 redirect_to root_path 18 else 19 render :edit_other_info 20 end 21 end 22 23 24 private 25 26 27 def user_params 28 params.require(:user).permit(:email, 29 :worker_prefecture_id, 30 :childcare_worker_number, 31 :childcare_worker_id, 32 :first_name, 33 :last_name, 34 :first_name_reading, 35 :last_name_reading, 36 :birth_date, 37 :postcode, 38 :prefecture_id, 39 :city, 40 :block, 41 :building, 42 ) 43 end 44 end
ruby
1edit_orther_info.html.erb 2 3 4 <%= form_with model: @user, url: update_other_info_user_path(@user), method: :patch, class: 'registration-main',local: true do |f| %> 5<div class="contents"> 6 <div class='form-wrap'> 7 <div class='form-header'> 8 <h1 class='form-header-text'> 9 登録情報入力 10 </h1> 11 </div> 12 <div class="form-group"> 13 <%= render 'devise/shared/error_messages', model: f.object %> 14 </div> 15 16<div class="form-group"> 17 <div class='form-text-wrap'> 18 <label class="form-text">メールアドレス</label> 19 <span class="indispensable">必須</span> 20 </div> 21 <%= f.email_field :email, class:"input-default", id:"email", placeholder:"PC・携帯どちらでも可", autofocus: true %> 22 </div> 23 24 <div class="form-group"> 25 <div class='form-text-wrap'> 26 <label class="form-text">お名前(全角)</label> 27 <span class="indispensable">必須</span> 28 </div> 29 <div class='input-name-wrap'> 30 <%= f.text_area :last_name, class:"input-name", id:"last-name", placeholder:"例) 山田" %> 31 <%= f.text_area :first_name, class:"input-name", id:"first-name", placeholder:"例) 陸" %> 32 </div> 33 </div> 34 <div class="form-group"> 35 <div class='form-text-wrap'> 36 <label class="form-text">お名前かな(全角)</label> 37 <span class="indispensable">必須</span> 38 </div> 39 <div class='input-name-wrap'> 40 <%= f.text_area :last_name_reading, class:"input-name", id:"last-name-kana", placeholder:"例) やまだ" %> 41 <%= f.text_area :first_name_reading, class:"input-name", id:"first-name-kana", placeholder:"例) りく" %> 42 </div> 43 </div> 44 <div class="form-group"> 45 <div class='form-text-wrap'> 46 <label class="form-text">保育士番号登録都道府</label> 47 <span class="indispensable">必須</span> 48 <%= f.select :worker_prefecture_id, options_for_select(WorkerPrefecture.pluck(:name, :id), @user.worker_prefecture_id), {}, { class: "select-box", id: "prefecture" } %> 49 </div> 50 <div class='input-text-wrap'> 51 <label class="form-text">保育士登録番号</label> 52 <span class="indispensable">必須</span> 53 </div> 54 <%= f.text_field :childcare_worker_number, class:"input-default", id:":childcare_worker_number", placeholder:"例)011111"%> 55 </div> 56 57 <div class="form-group"> 58 <div class='form-text-wrap'> 59 <label class="form-text">生年月日</label> 60 <span class="indispensable">必須</span> 61 </div> 62 <div class='input-birth-wrap'> 63 <%= raw sprintf( 64 f.date_select( 65 :birth_date, 66 class:'select-birth', 67 id:"birth-date", 68 use_month_numbers: true, 69 prompt:'--', 70 start_year: 1930, 71 end_year: (Time.now.year - 5), 72 date_separator: '%s'), 73 "<p> 年 </p>", "<p> 月 </p>") + "<p> 日 </p>" %> 74 </div> 75 </div> 76 77 <div class="form-group"> 78 <div class='form-text-wrap'> 79 <label class="form-text">郵便番号</label> 80 <span class="indispensable">必須</span> 81 </div> 82 <%= f.text_field :postcode, class:"input-default", id:"postal-code", placeholder:"例)123-4567", maxlength:"8" %> 83 </div> 84 <div class="form-group"> 85 <div class='form-text-wrap'> 86 <label class="form-text">都道府県</label> 87 <span class="indispensable">必須</span> 88 </div> <%= f.select :prefecture_id, options_for_select(Prefecture.pluck(:name, :id), @user.prefecture_id), {}, { class: "select-box", id: "prefecture" } %> 89 </div> 90 <div class="form-group"> 91 <div class='form-text-wrap'> 92 <label class="form-text">市区町村</label> 93 <span class="indispensable">必須</span> 94 </div> 95 <%= f.text_field :city, class:"input-default", id:"city", placeholder:"例)横浜市緑区"%> 96 </div> 97 <div class="form-group"> 98 <div class='form-text-wrap'> 99 <label class="form-text">番地</label> 100 <span class="indispensable">必須</span> 101 </div> 102 <%= f.text_field :block, class:"input-default", id:"addresses", placeholder:"例)青山1-1-1"%> 103 </div> 104 <div class="form-group"> 105 <div class='form-text-wrap'> 106 <label class="form-text">建物名</label> 107 <span class="form-any">任意</span> 108 </div> 109 <%= f.text_field :building, class:"input-default", id:"building", placeholder:"例)柳ビル103"%> 110 </div> 111 <div class='register-btn'> 112 <%= f.submit "登録" ,class:"register-sub-btn" %> 113 </div> 114</div> 115<% end %> 116 117
試したこと
modelのバリデーションを何度も書き換えて行った。
validates :password, presence: true, on: :create
等、
バリデーションだけでは不十分かなと思い、コントローラーも何度か記述を変えてみた。
が、パスのバリデーションエラーが発生。
なんのバリデーションに引っかかっているのか分かれば改善できる...?
補足情報(FW/ツールのバージョンなど)
Rails 6.0.6.1
devise-4.9.2

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。