フラッシュメッセージをカスタマイズ
問題:私は“ウェルカム、あなたが首尾よくサインアップしている”フラッシュメッセージは、ユーザーがサインアップするときに表示されます.もっと個人的なものが欲しい.暖かい歓迎したい.簡単!点滅して、それは行われます!まあ、そんなに速く、実際に.
サインアップのこの退屈なプロセスに少しの暖かさを加えるために、私は彼女/ユーザ名によって新しいユーザーに対処したいです.まず最初にユーザ名属性を追加することでユーザモデルを変更する必要があります.
私のアプリケーションフォルダーでは、deviseビューはどこにも見つかりません.明らかに、彼らは隠されていますが、それらを見る方法がなければなりません!ここに、GEM 1の著者によって書かれた大きなドキュメンテーションがあります.考案は、専用のフォルダ内の認証に関連付けられているすべてのビューをコピーする簡単なジェネレータを提供します.
ユーザーが正しいメール、パスワードとユーザー名を提供するとき、新しいユーザーは登録されます.フードの下で、登録コントローラはヒットします、そして、特に登録のためにロジックを保持するその作成メソッド.プロセスが成功した場合、コントローラは関連するビューにウェルカムメッセージを表示するよう依頼します.このコントローラーにアクセスして、作成方法を変更する必要があります.しかし、デフォルトでは、deviseコントローラも同様に隠されます.問題なく、カスタマイズ可能なコントローラを作成する簡単なジェネレータもあります.
現在、私は私の登録コントローラを見ることができます、しかし、私が想像した方法ででなく.
SetHorseフラッシュメッセージメソッドがユーザー名変数にアクセスできるようになったので、私は工夫を開く必要があります.enymlファイルを登録します.
すべてが良いように、私はサーバーを再起動し、今私は良い歓迎メッセージを受信する準備が整いました.迅速なテストとまあ、どのように失望!私は新しいフラッシュメッセージを持っていますが、私は私のユーザ名が表示されません.何が間違っている私は尋ねる?それは超高速であることになっていました、そして、私はすでに全部を理解しているあまりに多くの時間を費やしました.Railsコンソールをチェックすると、最後の登録ユーザーはNILに設定されたユーザ名を持っていることがわかります.しかし、私は美しいものに入りました、しかし、工夫は私のdBでそれを保存することを拒否しました.私が推測するセキュリティ問題でなければなりません.リストにユーザー名パラメータを追加する場所を見つける必要があります.
もう一度ドキュメントを考案する私の友人です.ソースコードを変更する必要はありませんが、アプリケーションコントローラで許可されているパラメータを2段階で設定する必要があります.
アクションの追加
ConfigureHeight permittedHeightパラメーターメソッドを追加する
deviseのすべての参照は、彼らの大きなドキュメンテーションです.たとえば、ビューを構成するには、を参照してください
Rubyの' super 'キーワードについての簡単な概要については
Devseのソースコードはオープンソースであり、HeartコンボGithubリポジトリで利用可能です.たとえば、登録コントローラのソースコードはこちら
何が私はパーソナライズされたメッセージを表示する必要がありますか?
サインアップのこの退屈なプロセスに少しの暖かさを加えるために、私は彼女/ユーザ名によって新しいユーザーに対処したいです.まず最初にユーザ名属性を追加することでユーザモデルを変更する必要があります.
$ rails generate migration AddUsernameToUsers username:string
それからDB DBスキーマの変更を保存します.$ rails db:migrate
今、私はユーザに良いユーザ名を設定する可能性を与えなければなりません.私の見る限りでは、Develseのデフォルトビューにはサインアップのための2つの必須フィールドがあります.ので、登録のビューにアクセスする必要があります.ディスコース登録はどこですか?
私のアプリケーションフォルダーでは、deviseビューはどこにも見つかりません.明らかに、彼らは隠されていますが、それらを見る方法がなければなりません!ここに、GEM 1の著者によって書かれた大きなドキュメンテーションがあります.考案は、専用のフォルダ内の認証に関連付けられているすべてのビューをコピーする簡単なジェネレータを提供します.
$ rails generate devise:views
現在、私はdeviseフォルダを持っています、そして、中で、私は新しいもので登録フォルダを見つけることができます.HTML .私が予想したerbファイル.フォームにユーザー名フィールドを追加するだけです. <div class="form-inputs">
<%= f.input :username,
required: true,
autofocus: true,
input_html: { autocomplete: "username" }%>
<%= f.input :email,
required: true,
autofocus: true,
input_html: { autocomplete: "email" }%>
<%= f.input :password,
required: true,
hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
input_html: { autocomplete: "new-password" } %>
<%= f.input :password_confirmation,
required: true,
input_html: { autocomplete: "new-password" } %>
</div>
登録アクションの管理者はどこですか?
ユーザーが正しいメール、パスワードとユーザー名を提供するとき、新しいユーザーは登録されます.フードの下で、登録コントローラはヒットします、そして、特に登録のためにロジックを保持するその作成メソッド.プロセスが成功した場合、コントローラは関連するビューにウェルカムメッセージを表示するよう依頼します.このコントローラーにアクセスして、作成方法を変更する必要があります.しかし、デフォルトでは、deviseコントローラも同様に隠されます.問題なく、カスタマイズ可能なコントローラを作成する簡単なジェネレータもあります.
$ rails generate devise:controllers users
私は、ユーザーをスコープとして使用します.認証に関連付けられているコントローラは、私のアプリケーションのコントローラフォルダ内のユーザーフォルダになります.どのように、私は登録コントローラを修正しますか?
現在、私は私の登録コントローラを見ることができます、しかし、私が想像した方法ででなく.
# POST /resource
# def create
# super
# end
私は' super 'キーワード2親/子クラスとは何かを持っている知っている.私はそれを保つことができて、新しい振舞いを加えることができました、しかし、私が修正して、加えないように、私は単にカスタムコードでそれを取り替えます.さて、私はそれのすべてをカスタマイズしたくないので、私は元のコードを保って、私が必要とするものを修正するのを好みます.Registrationsコントローラコード3のDevelseのソースを簡単に見てください.# POST /resource
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
set_flash_message! :notice, :signed_up
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end
私はここに2つの可能性を持って、私は将来的に私のアプリを国際化する場合に依存します.そうでなければ、私は単にset_flash_message! :notice, :signed_up
そばflash[:notice] = "Hello there, #{resource.username}! Glad to welcome you here!"
しかし、私はすぐにI 18 N宝石を使用したいので、私はSetHorseフラッシュメッセージメソッドにユーザー名変数を渡すことを好むし、deviseを変更します.enフラッシュメッセージのすべての英訳を保持するYMLファイル.set_flash_message! :notice, :signed_up, :username => resource.username
どのように、私はフラッシュメッセージをカスタマイズしますか?
SetHorseフラッシュメッセージメソッドがユーザー名変数にアクセスできるようになったので、私は工夫を開く必要があります.enymlファイルを登録します.
en:
devise:
registrations:
sign_up: "Hello there, %{username}! Glad to welcome you here!"
デバッグ.
すべてが良いように、私はサーバーを再起動し、今私は良い歓迎メッセージを受信する準備が整いました.迅速なテストとまあ、どのように失望!私は新しいフラッシュメッセージを持っていますが、私は私のユーザ名が表示されません.何が間違っている私は尋ねる?それは超高速であることになっていました、そして、私はすでに全部を理解しているあまりに多くの時間を費やしました.Railsコンソールをチェックすると、最後の登録ユーザーはNILに設定されたユーザ名を持っていることがわかります.しかし、私は美しいものに入りました、しかし、工夫は私のdBでそれを保存することを拒否しました.私が推測するセキュリティ問題でなければなりません.リストにユーザー名パラメータを追加する場所を見つける必要があります.
強いパラメータを考案する
もう一度ドキュメントを考案する私の友人です.ソースコードを変更する必要はありませんが、アプリケーションコントローラで許可されているパラメータを2段階で設定する必要があります.
アクションの追加
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
end
そして今、魔法が起こります。)
Reference
この問題について(フラッシュメッセージをカスタマイズ), 我々は、より多くの情報をここで見つけました https://dev.to/cecilerx/customize-devise-s-flash-messages-2oi6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol