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

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

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

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

Q&A

解決済

1回答

456閲覧

ユーザー管理機能のユーザー編集ができない

aki_aki

総合スコア3

Ruby on Rails

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

0グッド

0クリップ

投稿2021/12/15 13:18

前提・実現したいこと

初めての質問をさせていてだきます。
質問の仕方などに問題があればご指摘ください。

今困っていることは、user管理機能の作成中でuserの編集機能を実装しているところです。
そしてuserの編集を行い更新できたらトップページに遷移する流れをやりたいのですが、上手く行きません。

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

更新ボタンを押しても更新がされないままトップページに戻ってきてしまう。
編集に失敗した時はrenderでedit画面に留まる流れは機能しています。

エラーメッセージ ```エラーメッセージは表示されません。 ### 該当のソースコード ```ruby users_controller.rb def edit end def update if current_user.update(user_params) redirect_to root_path else render :edit end end private def user_params params.require(:user).permit(:company, :email) end end ```ruby ```ruby edit.html.erb <div class='account-page' id='account-page'> <div class='account-page__inner clearfix'> <div class='account-page__inner--left account-page__header'> <h2>UPDATE</h2> <h5>アカウントの編集</h5> <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: 'btn'%> <%= link_to "HOME", :back, class: 'btn'%> </div> <div class='account-page__inner--right user-form'> <%= form_with model: current_user, local: true do |f|%> <div class='field'> <div class='field-label'> <%= f.label :company %> </div> <div class='field-input'> <%= f.text_field :company, autofocus: true%> </div> </div> <div class='field'> <div class='field-label'> <%= f.label :email%> </div> <div class='field-input'> <%= f.email_field :email%> </div> </div> <div class='actions'> <%= f.submit "GO", class: 'btn'%> </div> <% end %> </div> </div> </div> ```ruby ```routes.rb Rails.application.routes.draw do devise_for :users get 'works/index' root to: "works#index" resources :users, only: [:edit, :update] resources :works, omly: [:index] end ```ruby ```user.rb class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable validates :company, presence: true PASSWORD_REGEX = /\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i.freeze validates_format_of :password, with: PASSWORD_REGEX, message: 'が無効です。文字と数字を含めてください。' end

試したこと

binding.pryでデバックしたところ
<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"zNdmJpY9q6MJ10TKeJ7bM4SVrE0csMcj5k4fzd2kJGuCoWCHPth+R7/cjR+RQ+AfAhZmD34mU+up3bcw8h51aQ==", "user"=>{"company"=>"ooofff", "email"=>"ccc@cccc"}, "commit"=>"GO", "controller"=>"users", "action"=>"update", "id"=>"2"} permitted: false>
となりました。

補足情報(FW/ツールのバージョンなど)

ruby '2.6.5'
rails 6.0.0

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

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

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

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

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

winterboum

2021/12/15 21:19

更新ボタンを押しても更新がされないままトップページに戻ってきてしまう。 編集に失敗した時はrenderでedit画面に留まる流れは機能しています。 というのが矛盾しているようで状況がつかめません。 「更新ボタンを押しても更新がされない」のは「編集に失敗した時」ではないのですか?
aki_aki

2021/12/15 23:51

ありがとございます。 何も記入せずに更新ボタンを押したら編集画面に留まります。
guest

回答1

0

ベストアンサー

if current_user.update はfalseを返さないので、常に if に行くと思うので、elseになるのが??ではあります。

current_user.attributes = user_params if current_user.save

で。
ただ、今のclass Userの定義では、save時にpaasswordが与えられていないので、必ず else に行ってしまいます。
passwordのvalidationを工夫してください

投稿2021/12/16 01:38

winterboum

総合スコア23416

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

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

aki_aki

2021/12/16 07:23

ありがとうございます。 passwordのvalidationを修正したところうまく行きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問