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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

2回答

2446閲覧

【rails】undefined method `authenticate!' for nil:NilClass

退会済みユーザー

退会済みユーザー

総合スコア0

Devise

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/05/29 02:01

前提・実現したいこと

Ruby on railsで「devise」を使いログイン機能を実装したいです。

発生している問題

ログインフォームでsubmitボタンを押すとエラーメッセージが発生する。

エラーメッセージ

NoMethodError in Users::SessionsController#create undefined method `authenticate!' for nil:NilClass

該当のソースコード

ログインフォームのView
app/views/users/sessions/new.html.erb

<p>ログイン用ページ</p> <p>ログインしていないと使用できない機能もあります。</p> <%= form_for :session,:url => {controller: "sessions", action: "create" } do |f| %> <p>ユーザーIDを記入</p> <%= f.text_field :user_id %> <p>パスワードを記入</p> <%= f.password_field :password %> <%= f.submit "ログイン!" %> <% end %>

ログインフォームのコントローラー
app/controllers/users/sessions_controller.rb

class Users::SessionsController < Devise::SessionsController before_action :tintin, only: [:create] def new end def create # 多分@userがnillになっている if @user.authenticate!(password: params[:password]) session[:user_id] = user.user_id flash[:notice] = "ログイン成功" redirect_to("/") else flash[:alert] = "ログイン失敗だよ" render action: :new end end def session_params params.permit(:user_id, :password) end def tintin @user = User.find_by(user_id: params[:user_id]) end end

補足情報

Windows 10 home 64ビット
ruby 2.6.6
Ruby on rails 6.0.3.1
PostgreSQL 13beta1
テキストエディタ Atom

失礼な点があるかもしれませんがどうぞ宜しくおねがい致します。

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

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

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

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

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

guest

回答2

0

多分@userがnillになっている

多分、じゃなく実際に確認してみよう

undefined method `authenticate!' for nil:NilClass

nil なので `authenticate!' メソッドないぞ!とおっしゃってます

投稿2020/05/29 02:07

y_waiwai

総合スコア87774

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

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

退会済みユーザー

退会済みユーザー

2020/05/29 02:33

nillなのは理解したのですが今の状態でなぜnillになるのかがいまいちわからないのでもっと考えてみます。
guest

0

ベストアンサー

if文を下のように変更したところ治りました!
if @user && @user.authenticate!(password: params[:password])
追記
viewのform_forで変数がセットされていませんでした。

投稿2020/05/29 02:43

編集2020/05/30 00:52
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

y_waiwai

2020/05/29 02:44

そのまえに、なぜnilになるのか追求しようよw
退会済みユーザー

退会済みユーザー

2020/05/30 00:51

その後考えたらなんとか直りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問