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

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

ただいまの
回答率

90.75%

  • Ruby on Rails

    6751questions

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

  • Devise

    235questions

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

【RoR + Devise】deviseでエラーメッセージ(alert)を表示したい

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 588

pecchan

score 201

Ruby on Rails 5 と deviseにて
社内システムに、ログイン機能を追加しました。

こちらのおかげで、退職者をログイン出来ないようにしました。
※退職者がログインすると、強制的にログイン画面に戻される

その際、アラートを表示させたく、
以下のようにしましたが何も表示されません。

deviseにてアラートを表示するにはどうすればよろしいのでしょうか?

宜しくお願い致します。

1.ログインの可否判定 ※controllers/application_controller.rb

class ApplicationController < ActionController::Base

    def after_sign_in_path_for(resource)
        if current_employee.retire_date.blank?
        else
            sign_out Employee.find(current_employee.id)

            #表示されない
            flash[:alert] =  '退職者はログインできません'

            #こちらも表示されない
            flash.now[:alert] =  '退職者はログインできません'
        end
        root_path
    end

2.アラート表示部分 ※views/layouts/application.html.erb

    <div class="row">

       <% if alert %>
           <%= alert %>
       <% end %>

    </div>

2017/11/08 追記
flashが表示されない原因が分かったかもです。
コントローラのsign_out でログアウトするため、
セッションと共にflashの内容も消えてるのだと思います。

そこで以下のようにしました
※controllers/application_controller.rb

            #flash.now[:alert] =  '退職者はログインできません'
            redirect_to "/employees/sign_in", alert: '退職者はログインできません'

ですが下のようにDoubleRenderエラーになってしまいます。
イメージ説明

ダブルレンダーエラーを回避出来ればメッセージを表示できそうに思うのですが
分かる方教えていただけないでしょうか?

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

View を以下のように変更すれば表示されると思います。

<!-- views/layouts/application.html.erb -->

<% if flash[:alert].present? %>
  <%= flash[:alert] %>
<% end %>

sign_out 時にリダイレクト処理が行われるので、Controller では flash を使用してください。

# controllers/application_controller.rb

class ApplicationController < ActionController::Base

  def after_sign_in_path_for(resource)
    if current_employee.retire_date.blank?
    else
      sign_out Employee.find(current_employee.id)
      flash[:alert] = '退職者はログインできません'
    end
    root_path
  end
end

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/07 15:40

    minadukirein 様

    有難う御座います。
    viewを変更しましたが、何も表示されませんでした・・・。

    キャンセル

  • 2017/11/07 16:26

    申し訳ございません、勘違いしている箇所がありました。
    sign_out 時にリダイレクト処理が行われるので、
    flash.now[:alert] ではなく、flash[:alert] を利用してみてください。
    ※回答のコードは編集しました

    キャンセル

  • 2017/11/07 16:35

    度々すみません、有難う御座います。
    Viewは変えずControllerのflash.now[:alert] を、flash[:alert] に変えましたが同じでした・・・orz

    キャンセル

  • 2017/11/07 16:59

    表示されませんか...。私も同じような処理を試したときに、
    掲示したコードでうまくいったのですが、環境が違うので何か別の問題があるのかもしれません。
    お力になれず、申し訳ないです。

    キャンセル

  • 2017/11/07 17:02

    とんでもないです。
    お付き合いいただき有難う御座います。

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Ruby on Rails

    6751questions

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

  • Devise

    235questions

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