Ruby on Railsを利用して、プロフィールの編集画面を作っています。
画像(image)、名前(name)、ひとこと(comment)、パスワード(password)を変更できる機能を作っています。
パスワード変更せずに更新しようとすると
Password can't be blank, Password is too short
と出てきます。
パスワードを変更しなくても更新できるようにしたいです。
以下、問題がありそうなコードです。
分かりづらい部分もあると思いますが、よろしくお願い致します。
users_controller.rb
def edit @user = User.find(current_user.id) end def update @user = User.find(current_user.id) upload_file = params[:user][:image] #画像のみ更新可能 if upload_file.present? upload_file_name = upload_file.original_filename output_dir = Rails.root.join('public', 'users') output_path = output_dir + upload_file_name File.open(output_path, 'w+b') do |f| f.write(upload_file.read) end @user.name = params[:name] @user.comment = params[:comment] @user.password = params[:password] current_user.update(user_params.merge({image: upload_file.original_filename})) end if @user.save flash[:success] = 'プロフィールを更新しました。' redirect_to("/") else flash.now[:danger] = 'プロフィールの更新に失敗しました。' render :edit end end private def user_params params.require(:user).permit(:name, :email, :password, :comment, :image) end end
edit.html.erb
<div class="container"> <ul class="profiles"> <%= form_for @user, url: edit_path, method: :post do |f| %> <div class="field"> <%= f.label :image, "画像" %> <%= f.file_field :image %> </div> <div class="field"> <%= f.label :name, "名前" %> <%= f.text_field :name, placeholder: "名前を入力して下さい。" %> </div> <div class="field"> <%= f.label :comment, "ひとこと" %> <%= f.text_field :comment, placeholder: "自己紹介" %> </div> <div class="field"> <%= f.label :password, "パスワード" %> <%= f.text_field :password, placeholder: "パスワードを更新しない場合は入力しないで下さい。" %> </div> <div class="field"> <%= f.label :password_confirmation, "パスワード(確認)" %> <%= f.password_field :password_confirmation, placeholder: "確認用" %> </div> <div class="button_wrap"> <input type="submit" value="送信する" class="button"> </div> <% end %> </ul> </div>
routes.rb
get '/users/profiles/edit', to: 'users#edit',as: :edit post '/users/profiles/edit', to: 'users#update', as: :update
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/04 09:22