5

ユーザーが [パスワードを忘れた場合] をクリックすると、メール アドレスを入力するフィールドがある [パスワードを忘れた場合] ページに移動します。メールアドレスがデータベースにある場合はすべて問題ありませんが、メールアドレスがデータベースに存在しない場合は、同じページにリダイレクトされますが、エラーメッセージは表示されません.

エラーメッセージを表示するにはどうすればよいですか?

/view/devise/passwords/new.html.erb

...
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f| %>
    <h1>Reset Password</h1>     

    <div class="login-fields">

        <p>Instructions on resetting your password will be emailed to you.</p>

        <%= render :partial => '/shared/messages' %>

        <div class="field">
            <%= f.label :email %>
            <%= f.email_field :email, :placeholder => 'Email', :class => 'login username-field' %>
        </div> <!-- /field -->

    </div> <!-- /login-fields -->

    <div class="login-actions">

        <%= content_tag(:button, :type=>:submit, :class => "button btn btn-secondary btn-large") do %>
            Send me reset password instructions
        <% end %>

    </div> <!-- .actions -->

    <div class="login-social">
        <%= render "devise/shared/links" %>
    </div>

<% end %>
...

/views/shared/_messages.html.erb

<% if alert || flash[:alert] || flash[:error] %>
    <div class="alert alert-error">
        <a class="close" data-dismiss="alert" href="#">x</a>
        <h4 class="alert-heading">Error!</h4>
        <%= alert %>
        <%= flash[:error] %>
    </div>
<% end %>

<% if flash[:success] || notice || flash[:notice]%>
    <div class="alert alert-success">
        <a class="close" data-dismiss="alert" href="#">x</a>
        <h4 class="alert-heading">Success!</h4>
        <%= flash[:success] %>
        <%= notice %>
    </div>
<% end %>
4

3 に答える 3

3

devise に付属のデフォルトpasswords/new.html.erbビューを見ると、次の呼び出しが含まれていることがわかります。

<%= devise_error_messages! %>

必要に応じて、ビューで同じヘルパーを使用して、ユーザー オブジェクトに添付されたエラー メッセージをレンダリングできます (Anurag の回答で指摘されているように、メッセージはフラッシュではなくモデル オブジェクトに添付されます)。

このヘルパーは、次のようなマークアップを返します。

<div id="error_explanation">
  <h2>1 error prohibited this user from being saved</h2>
  <ul><li>email not found</li></ul>
</div>

これをカスタマイズしたい場合は、簡単に行うことができます。ヘルパーを使用しないでください。代わりに、アクセスresource.errors.full_messagesして「メールが見つかりません」というメッセージを取得する独自のカスタム マークアップを追加してください。または、正直なところ、このページで発生する唯一のエラーなので、次のようにすることもできます。

<% unless resource.errors.empty? %>
  <div>email not found</div>
<% end %>
于 2013-11-05T18:38:38.520 に答える