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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Devise

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

Ruby

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

Ruby on Rails

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

解決済

Rails devise(given 0, expected 1)の解決方法を教えていください!

EleAco
EleAco

総合スコア0

Devise

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

Ruby

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

Ruby on Rails

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

1回答

0評価

0クリップ

727閲覧

投稿2020/11/03 03:46

編集2022/01/12 10:58

Railsにてdeviseを使用したユーザー情報のアップデートを実行中エラーが出ており躓いています…

##エラー文
refistrations_controller.rbのupdateにbinding.pryでエラーを出力しております

**registrations_controller.rb** def update super binding.pry end

ターミナル上でエラー文を確認

[2] pry(#<Users::RegistrationsController>)> @user.update ArgumentError: wrong number of arguments (given 0, expected 1) from /Users/eleaco/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/persistence.rb:616:in `update'

よくみる引数が一つ必要だが足りないと言われています…

##コード
viewからみていきます

**registrations>edit.html.erb** <%= form_with model: @user, url: user_registration_path, local: true do |f| %> <%= render "devise/shared/error_messages", resource: resource %> <div class="edit-profile-container"> <%= f.text_area :profile, class: 'edit-profile'%> </div>

registrarions_controller.rb

**registrations_controller.rb** class Users::RegistrationsController < Devise::RegistrationsController before_action :configure_account_update_parameters, only: [:update] def update #@user.update(account_update_params)ここ消しました理由はbefore_actionで #configure_account_update_parametersメソッドを呼び出しているからです end protected def configure_account_update_parameters devise_parameter_sanitizer.permit(:account_update, keys: [:profile]) end

application_controller.rb

**application_controller.rb** class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname]) devise_parameter_sanitizer.permit(:account_update, keys: [:profile]) end end

##皆様のご指摘で追加したコード達

**registrations_controller.rb** def update super binding.pry end

binding.pryで中に何が入っているか確認します

[2] pry(#<Users::RegistrationsController>)> @user => #<User id: 2, nickname: "gest", email: "gest@gest", profile: "これは自己紹介です", created_at: "2020-11-01 00:55:52", updated_at: "2020-11-01 00:55:52">

自己紹介文は@userに入っています…しかし保存はできません…

binding.pryにて@user.errors.messagesを追加

[1] pry(#<Users::RegistrationsController>)> @user.update ArgumentError: wrong number of arguments (given 0, expected 1) from /Users/eleaco/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activerecord-6.0.3.4/lib/active_record/persistence.rb:616:in `update' [2] pry(#<Users::RegistrationsController>)> @user.errors.messages => {:password=>["can't be blank", "is invalid"], :current_password=>["can't be blank"], :profile=>[]}#profileに記述しましたが空のようです [3] pry(#<Users::RegistrationsController>)>

user.rb

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable with_options presence: true do |i| i.validates :nickname i.validates :email i.validates :password i.validates :encrypted_password #profileを記述していない!!ここでしょうか…? end

このようなコードになっております
皆様のお力をお貸しください!
よろしくお願いいたします!

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum
winterboum

2020/11/03 04:00

どのfileのどの行かという情報もあるとおもうのですが、 エラーは全文のせて
winterboum
winterboum

2020/11/03 04:03

account_update_params が載っていないようです
EleAco
EleAco

2020/11/03 04:18

winterboum様 ご指摘ありがとうございます! エラー文を追加いたしました account_update_params が載っていないようです> こちらはどのように記述するのが正しいのでしょうか… 理解ができずすみません(;_;) 引き続きよろしくお願いいたいします
winterboum
winterboum

2020/11/03 04:23

多分そういうmethodが有るはずですので、そのcodeを
asm
asm

2020/11/03 04:28

> [2] pry(#<Users::RegistrationsController>)> @user.update あなたがpry上で「@user.update」と入力しているように見えますが その理解でよろしいでしょうか?
EleAco
EleAco

2020/11/03 06:32

asmさん質問ありがとうございます 質問の内容に追加で記述します! asmさんの解釈でお間違えありません! binding.pryをregistrarions_controller.rbのupdateに記述してます
winterboum
winterboum

2020/11/03 07:20 編集

Userのvalidation載せてください」
winterboum
winterboum

2020/11/03 07:34 編集

あまちがい取消書き直します

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Devise

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

Ruby

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

Ruby on Rails

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