🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Q&A

解決済

1回答

802閲覧

ユーザー情報を編集し更新することができない。

hatopopo21

総合スコア40

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/02/06 13:07

現状

ユーザー機能を実装中です。ユーザー画面に遷移して編集し、情報を更新したら詳細画面に画面遷移するように実装しようしています。

解決したいこと

更新した後に、画面遷移が詳細画面に戻るようにしたいです。
現状では、編集画面に留まり情報の更新することができないので更新できるようにしたいです。
パラメーターでは更新した情報を取得できているように思われます。
どこが原因かアドバイスいただけないでしょうか!
お願いします!

コード

↓user_controller

Ruby

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

↓edit.html.erb

Ruby

1<div class="show-container"> 2 <%= render "show_header" %> 3 4 <div class="show-contents"> 5 <div class="more"> 6 <%= form_with model: @user, url: user_path, local: true do |f| %> 7 <div class="more-lists"> 8 <p>ニックネーム :</p> 9 <p><%= f.text_field :nickname, class: 'form-event', autofocus: true%></p> 10 </div> 11 12 <div class="more-lists"> 13 <p>Email :</p> 14 <p><%= f.email_field :email, class: 'form-event' %></p> 15 </div> 16 17 <div class="more-lists"> 18 <p>名前 :</p> 19 <p><%= f.text_field :first_name, class: 'form-event' %> <%= f.text_field :last_name, class: 'form-event' %></p> 20 </div> 21 22 <div class="more-lists"> 23 <p>フリガナ :</p> 24 <p><%= f.text_field :first_name_kana, class: 'form-event' %> <%= f.text_field :last_name_kana, class: 'form-event' %></p> 25 </div> 26 27 <%= link_to root_path do %> 28 <button class="cancel-btn">戻る</button> 29 <% end %> 30 31 <%= f.submit "Update", class: 'cancel-btn'%> 32 <% end %> 33 </div> 34 </div> 35</div> 36

↓route.rb

Ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "rooms#index" 4 resources :rooms, only: [:new, :create] do 5 resources :memos, only: [:index, :create] 6 end 7 resources :events, only: [:index, :new, :create] 8 resources :users, only: [:show, :edit, :update] 9end

↓model:user.rb

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 has_many :room_users 8 has_many :rooms, through: :room_users 9 has_many :memos 10 has_many :events 11 12 with_options presence: true, format: { with: /\A[ぁ-んァ-ヶ一-龥々]+\z/, message: '全角文字を使用してください' } do 13 validates :first_name 14 validates :last_name 15 end 16 17 with_options presence: true, format: { with: /\A[ァ-ヶ一-]+\z/, message: '全角カナを使用してください' } do 18 validates :first_name_kana 19 validates :last_name_kana 20 end 21 22 validates :password, presence: true, length: { minimum: 6 }, 23 format: { with: /(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{6,}/, message: 'は半角英数字で入力してください' } 24 25 validates :nickname, presence: true 26 27end

↓更新時に取得したパラメーター

Ruby

1=> <ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"g+/y1arGj1kV4z4RW9o59aAnrYKixABaLYnZ1/RRuWpEitvB+6MX0Z/1b+2KfVyLYQviRweSamZIRORZJ1I+6w==", "user"=>{"nickname"=>"test", "email"=>"test3@test", "first_name"=>"名前", "last_name"=>"名前", "first_name_kana"=>"テスト", "last_name_kana"=>"テスト"}, "commit"=>"Update", "controller"=>"users", "action"=>"update", "id"=>"1"} permitted: false>

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

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

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

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

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

guest

回答1

0

ベストアンサー

if @user.update(user_params)if @user.update!(user_params)と!をつけるとはっきりしますが、多分passwordがないというエラーでしょう。
validates :password, に on: :create optionを追加してください。

投稿2021/02/06 23:15

winterboum

総合スコア23567

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

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

hatopopo21

2021/02/08 05:05

解決しました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問