Nidhin S G
Nidhin S G

Reputation: 1695

Custom Profile Edit Page. Devise Gem

I'm new to Rails. I have a register page in my app. Also a profile page. I'm trying to make an edit page where I can edit users email, password and all. I want to do all this using devise.. I have reached so far. here is my edit page.

<div class="edit_profile_page">
<%= form_for(current_user, :url => '/update', :html => { :method => :put }) do |f| %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
  <%= f.password_field :password, :autocomplete => "off" %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
  <%= f.password_field :current_password %></div>

  <div><%= f.submit "Update" %></div>
<% end %>
</div>

I'm stuck here. What url should i pass.. Also if this url points to a method say

def update_profile
end

what should i write inside that method so that the password will get updated like the one happened while registration.

Or

There is an edit page inside Device. How should i write my routes to reach there.

Upvotes: 0

Views: 1781

Answers (1)

wacaw
wacaw

Reputation: 196

You can also create own ProfilesController, example below:

Routes:

#routes.rb
resource :profile

Controller:

# coding: utf-8
class ProfilesController < ApplicationController
  before_filter :authenticate_user!

  def show
    @user=current_user
    @user.email = nil unless @user.email.scan('@example.com').empty?
    render 'devise/profile/edit'
  end

  def update
    @user=current_user
    if @user.update_attributes(params[:user])
        sign_in 'user', @user, :bypass => true
        flash[:notice] = t('users.profile.edit.updated')
        respond_to do |format|
            format.html { redirect_to '/'}
        end
    else
      render 'devise/profile/edit'
    end
  end
end

Views

#views/devise/profile/edit.html.haml
%h3
  = t('users.profile.basic_settings')
= simple_form_for @user, :url => profile_path, :html => { :method => :put } do |f|
  -#= f.error_messages
  = f.input :name, :placeholder=>t('activerecord.placeholders.name')
  = f.input :email, :placeholder=>t('activerecord.placeholders.email')
  = f.submit t('users.profile.change_name'), :class => "btn btn-primary"


  = t('users.profile.change_password')
= simple_form_for @user, :url => profile_path, :html => { :method => :put } do |f|
  -#= f.error_messages

  = f.input :password , :error_html => { :id => "password_error"}
  = f.input :password_confirmation
  = f.submit t('users.profile.change_password'), :class => "btn btn-primary"

Upvotes: 2

Related Questions