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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Sequel Pro

Sequel Proは、Mac OS X向けMySQLフロントエンドです。GUIからのMySQLの操作・管理が可能になります。強力なクエリ編集、多彩なエンコーディングオプションのサポートなど多くの機能を備えています。

Devise

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

Ruby

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

Ruby on Rails

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

Q&A

1回答

794閲覧

ユーザーの「プロフィール文」の更新ができない

ro-ru_ke-to

総合スコア0

Sequel Pro

Sequel Proは、Mac OS X向けMySQLフロントエンドです。GUIからのMySQLの操作・管理が可能になります。強力なクエリ編集、多彩なエンコーディングオプションのサポートなど多くの機能を備えています。

Devise

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

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/07/15 11:54

編集2021/07/15 12:19

前提・実現したいこと

ユーザー情報の一つである「プロフィール文」の編集機能を実装したいのですが、updateアクション実行時にデータが更新されません。htmlではform_withを使用しています。(Sequel Proに「profile」カラムが存在していることは確認済みです。)
どなたかご回答頂けると幸いです。よろしくお願いします。

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

エラーメッセージ(コンソール画面) 11: def update => 12: binding.pry 13: if @user.update(user_params) 14: redirect_to user_path 15: else 16: render :edit 17: end 18: end [1] pry(#<UsersController>)> @user.update(user_params) => false

該当のソースコード

Ruby

1ソースコード 2 3[users_controller.rb] 4 5class UsersController < ApplicationController 6 before_action :in_user, only: [:show, :edit, :update] 7 8 def show 9 @cats = @user.cats 10 end 11 12 def edit 13 end 14 15 def update 16 if @user.update(user_params) 17 redirect_to user_path 18 else 19 render :edit 20 end 21 end 22 23 private 24 25 def user_params 26 params.require(:user).permit(:profile) 27 end 28 29 def in_user 30 @user = User.find(params[:id]) 31 end 32end 33
[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 has_many :cats validates :password, format: { with:/\A(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[a-zA-Z\d]+\z/ } with_options presence: true do validates :nickname validates :profile end def remember_me true end end
[users/edit.html.erb] <div class="user-edit"> <div class="edit-main"> <h2 class="user-edit-title">プロフィール変更</h2> <%= form_with model:@user, local: true do |f| %> <%=f.text_area :profile, class:"user-edit-content" %> <%= f.submit "変更", class:"actions" %> <% end %> </div> </div>

試したこと

Qiitaなどで調べ、userモデルに「on::create」を記述してみたのですが、それでもダメでした。
また、プライベートメソッドの定義も間違っていないと思われます。
user_paramsには、編集後のプロフィール文が格納されていることも確かめました。

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

ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin20]

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.5'

gem 'rails', '~> 6.0.0'

gem 'mysql2', '>= 0.4.4'

gem 'puma', '~> 3.11'

gem 'sass-rails', '~> 5'

gem 'webpacker', '> 4.0'
https://github.com/turbolinks/turbolinks
gem 'turbolinks', '
> 5'

gem 'bootsnap', '>= 1.4.2', require: false

group :development, :test do
gem 'capistrano'
gem 'capistrano-rbenv'
gem 'capistrano-bundler'
gem 'capistrano-rails'
gem 'capistrano3-unicorn'
gem 'rspec-rails'
gem 'factory_bot_rails'
gem 'faker'
end

group :development do
gem 'rubocop', require: false

gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'

gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
gem 'webdrivers'
end

group :production do
gem 'unicorn', '5.4.1'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
gem 'devise'
gem 'pry-rails'
gem 'mini_magick'
gem 'image_processing', '~> 1.2'
gem 'active_hash'

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

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

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

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

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

guest

回答1

0

application.controller.rb

Ruby

1protected 2 3 def configure_permitted_parameters 4 devise_parameter_sanitizer.permit(:sign_up, keys: [:profile]) 5 devise_parameter_sanitizer.permit(:sign_in, keys: [:profile]) 6 devise_parameter_sanitizer.permit(:account_update, keys: [:profile]) 7 end

投稿2021/07/15 12:33

makox0105

総合スコア65

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

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

ro-ru_ke-to

2021/07/15 13:01 編集

早速のご回答ありがとうございました! 提示していただいた通りコードを記述しましたが、直りませんでした。。。 ```コンソール出力結果 Started PATCH "/users/1" for ::1 at 2021-07-15 21:54:48 +0900 Processing by UsersController#update as HTML Parameters: {"authenticity_token"=>"QhmDrzFLy5co367NlIkeoJvVQbKS8nYF/FmDyjx8s9DWHdnicNz57eZ1XHWEcRoFkJE+5DwOHsa4bWbu7woTMg==", "user"=>{"profile"=>"かきくけこ"}, "commit"=>"変更", "id"=>"1"} User Load (2.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1 ↳ app/controllers/users_controller.rb:26:in `in_user' Rendering users/edit.html.erb within layouts/application Rendered users/edit.html.erb within layouts/application (Duration: 1.9ms | Allocations: 310) [Webpacker] Everything's up-to-date. Nothing to do User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/views/layouts/application.html.erb:15 Completed 200 OK in 38ms (Views: 27.8ms | ActiveRecord: 2.8ms | Allocations: 12610) ```
makox0105

2021/07/15 13:03

お力添えできずすみません。 ちなみに私のusers_controllerは何も書いてませんでした。
ro-ru_ke-to

2021/07/16 01:19

その後、色々手直ししたらできました! 具体的には、当初deviseのデフォルトのedit.html.erbとは別にusers/edit.html.erbを作っていました。 ですが、コメントで頂いた「users_controllerには何も書かない」というところから、deviseのデフォルトファイルを用いてやってみたところ、無事解決しました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問