title: Connecting a User(devise) to their Profile
body: <p>I am using Devise and am trying to allow each User to create 1 Profile.  I am able to send the the newly registered User to the page where they can create a Profile, but once the User logs out and back in it will not go to the Profile Show page.</p>
  
  <p>In other words-</p>
  
  <p>I can sign up a new User and send the User to the Create Profile page, then I can create a Profile with the new User(I am not sure the Profile is saving correctly)... After I log out and sign in I recieved the error:</p>
  
  <pre><code>ActiveRecord::RecordNotFound in ProfilesController#show
  
  Couldn't find Profile without an ID
  </code></pre>
  
  <p>I would like the User to be sent to their Profile Show page...</p>
  
  <p>Any thoughts on the issue? </p>
  
  <p>The code (sorted by files) is below…</p>
  
  <p><strong>user.rb</strong></p>
  
  <pre><code>class User &lt; ActiveRecord::Base
    devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable
  
    attr_accessible :email, :password, :password_confirmation, :remember_me
  
   has_one :profile
  end
  </code></pre>
  
  <hr>
  
  <p><strong>profile.rb</strong></p>
  
  <pre><code>class Profile &lt; ActiveRecord::Base
   attr_accessible :first_name, :last_name
  
   belongs_to :user
  
  end
  </code></pre>
  
  <hr>
  
  <p><strong>profiles_controller.rb</strong></p>
  
  <pre><code>class ProfilesController &lt; ApplicationController
   # GET /profiles
   # GET /profiles.json
  def index
   @profiles = Profile.all
  
  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @profiles }
   end
  end
  
  # GET /profiles/1
  # GET /profiles/1.json
  def show
   @profile = Profile.find(params[:id])
  
   respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @profile }
   end
  end
  
  # GET /profiles/new
  # GET /profiles/new.json
  def new
   @profile = Profile.new
  
   respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @profile }
   end
  end
  
  # GET /profiles/1/edit
  def edit
   @profile = Profile.find(params[:id])
  end
  
  # POST /profiles
  # POST /profiles.json
  def create
    @profile = Profile.new(params[:profile])
  
  respond_to do |format|
    if @profile.save
      format.html { redirect_to @profile, notice: 'Profile was successfully created.' }
      format.json { render json: @profile, status: :created, location: @profile }
    else
      format.html { render action: "new" }
      format.json { render json: @profile.errors, status: :unprocessable_entity }
    end
   end
  end
  
  # PUT /profiles/1
  # PUT /profiles/1.json
  def update
   @profile = Profile.find(params[:id])
  
   respond_to do |format|
     if @profile.update_attributes(params[:profile])
       format.html { redirect_to @profile, notice: 'Profile was successfully updated.' }
       format.json { head :no_content }
     else
       format.html { render action: "edit" }
       format.json { render json: @profile.errors, status: :unprocessable_entity }
     end
   end
  end
  
  # DELETE /profiles/1
  # DELETE /profiles/1.json
  def destroy
    @profile = Profile.find(params[:id])
    @profile.destroy
  
    respond_to do |format|
      format.html { redirect_to profiles_url }
      format.json { head :no_content }
    end
   end
  end
  </code></pre>
  
  <hr>
  
  <p><strong>registrations_controller.rb</strong></p>
  
  <pre><code>class RegistrationsController &lt; Devise::RegistrationsController
    protected
  
    def after_sign_up_path_for(resource)
      request.env['omniauth.origin'] || stored_location_for(resource) || new_profile_path
    end
  end
  </code></pre>
  
  <hr>
  
  <p><strong>application_controller.rb</strong></p>
  
  <pre><code>class ApplicationController &lt; ActionController::Base
    def after_sign_in_path_for(resource)
      request.env['omniauth.origin'] || stored_location_for(resource) || show_path(resource.profile)
    end
  end
  </code></pre>
  
  <hr>
  
  <p><strong>routes.rb</strong></p>
  
  <pre><code>BaseApp::Application.routes.draw do
    resources :profiles
  
    get "users/show"
  
    devise_for :users, :controllers =&gt; { :registrations =&gt; "registrations" }
    resources :users
  
    match '/show', to: 'profiles#show'
  
  
    match '/signup',  to: 'users#new'
  
    root to: 'static_pages#home'
  
    match '/', to: 'static_pages#home'
  
    …
  end
  </code></pre>