Question

In my current Ruby on Rails project, the devise plugin has been used for authentication. To change the password, I added the devise plugin's passwords/edit.html.erb file into the user directory in my project. Everything's working fine except the error messages are not showing.

This is my current update_password method

def update_password
    @user = User.find(current_user.id)
    if @user.update_with_password(params[:user])
      sign_in @user, :bypass => true
      redirect_to root_path
    else
      render "edit"  
    end
  end

I've mentioned the require validation in the user model as follows

validates_presence_of :name, :primary_locale, :current_password, :password, :password_confirmation

This is my edit form code:

<div id="loginForm" class="editPwFormHeight">
    <div id="loginHeader"><h3><%= image_tag("wif_small.png"); %></h3></div>
    <div id="loginContent">
        <%= form_for(@user, :url => { :action => "update_password", :locale => params[:locale] }, :method => "post") do |f| %>
                <%= f.hidden_field :reset_password_token %>
            <p><%= f.password_field :current_password, :class => "login_txt", :placeholder => I18n.t('wi.common.enterCurrentPw'), :autocomplete => "off" %></p>
            <p><%= f.password_field :password, :class => "login_txt", :placeholder => I18n.t('wif.common.newPw'), :autocomplete => "off"  %></p>
            <p><%= f.password_field :password_confirmation, :class => "login_txt", :placeholder => I18n.t('wif.common.confirmPw'), :autocomplete => "off" %></p>
            <p>
                <input id="user_submit" name="commit" type="submit" value="<%= I18n.t('wif.common.updatePw') %>" class="login_btn" /> 
                <input id="user_cancel" name="commit" type="button" value="<%= I18n.t('wif.common.cancel') %>" class="login_btn" />
            </p>
        <% end %>
    </div>
</div>

Anyone can help me to solve this issue. I wanted to show the error message if the user has not typed the current password, or any other error which are currently supporting by the devise

Was it helpful?

Solution

You need to add the following line to your template:

<%= devise_error_messages! %>

You can customise the messages themselves by editing Devise's translation files, e.g. config/locales/devise.en.yml

If you're not using devise's built-in controllers, then you will need to register the DeviseHelper module as a helper in your controller using the helper method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top