2016-08-31 4 views
0

私はJavaの開発者ですが、私のチームは私の製品のためのSSOマイクロサービスをレールに開発していますので、私は勉強しています。私のパスワードを忘れてしまったカスタムフィールドを追加するには?

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %> 
<%= devise_error_messages! %> 
    <div class="row"> 
     <div class="medium-12 small-12"> 
      <div class="field"> 
       <%= f.label :email, class: 'field-label' %> 
       <%= f.email_field :email, autofocus: true %> 
      </div> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="actions columns medium-12 small-12"> 
      <%= f.submit "Send", id: "send-button" %> 
     </div> 
    </div> 

    <div class="row text-center align-center"> 
     <div class="small-8 small-centered columns"> 
      <br><p id="form-subheading">* For security reasons, we do NOT store your password. We will NEVER send your password via email.</p> 
     </div> 
    </div> 
<% end %> 

そして、それが正常にclass Users::PasswordsController < Devise::PasswordsController

# POST /resource/password 
def create 
super 
end 
に次の関数を通過:

は現在、私は、ユーザーがこのフォームに自分の電子メールを入力したときに、パスワードの確認がリセット送信するように設定しています

問題は今、フォームに電子メールを送信する前に、次のfirst_nameフィールドとlast_nameフィールドをフォームに追加してユーザーモデルに対して認証する必要がありますが、それらはパラメータを無視していますrs完全に。明らかにどこかで小切手が必要ですが、どこから始めたらいいか分かりません。

<div class="row"> 
    <div class="medium-5 small-12"> 
     <div class="field"> 
      <%= f.label :first_name, class: 'field-label' %> 
      <%= f.text_field :first_name %> 
     </div> 
    </div> 
    <div class="medium-6 medium-offset-1 small-12"> 
     <div class="field"> 
      <%= f.label :last_name, class: 'field-label' %> 
      <%= f.text_field :last_name %> 
     </div> 
    </div> 
</div> 

私は関数内byebug文を置けばparams[:user]変数は情報が含まれているため、彼らはバックエンドに送信されます知っています。フォームの新しい情報をどのように検証するのかがわかりません。

このフォームのカスタムフィールドを作成する際の助けに感謝します。

答えて

0

もちろん、1時間後に私はSOに投稿し、ドキュメントに必要なものがすぐに見つかります。

# config/initializers/devise.rb 
config.reset_password_keys = [:email] 

、あなたはそれらのフィールドを検証することができ、ユーザーモデルでは

config.reset_password_keys = [:email, :first_name, :last_name] 
0

のように変更します。

は私が必要と判明します。このようなもの:

validates :first_name, presence: true 
validates :last_name, presence: true 

フォームを送信した後、モデルで検証されます。 first_nameおよび/またはlast_nameが入力されていない場合は、フォームに戻ります。 Read this for more information about rails validations

また、あなたのコントローラーでは、パラメーターを受け入れる必要があります(まだ行っていない場合)。ユーザーコントローラで

def user_params 
    params.require(:user).permit(:first_name, :last_name) 
end 

あなたはおそらくすでにそれにfirst_namelast_nameを追加し、def user_paramsを持っています。

その後、通常通りにそれらのパラメータにアクセスできます。 (例:createファンクション@user = User.new(user_params)の場合、@user.first_nameになります)

関連する問題