I am using Devise and am trying to allow each user to create 1 profile (they can currently make many). I am able to send the the newly registered user to the page where they can create a profile, but when the User logs in it will not go to the Profile Show page - the error message is (Couldn''t find Profile without an ID... app/controllers/profiles_controller.rb:16:in `show'') The code (sorted by files) is below… user.rb # == Schema Information # # Table name: users # # id :integer not null, primary key # email :string(255) default(""), not null # encrypted_password :string(255) default(""), not null # reset_password_token :string(255) # reset_password_sent_at :datetime # remember_created_at :datetime # sign_in_count :integer default(0) # current_sign_in_at :datetime # last_sign_in_at :datetime # current_sign_in_ip :string(255) # last_sign_in_ip :string(255) # created_at :datetime not null # updated_at :datetime not null # class User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_me # attr_accessible :title, :body has_one :profile end --------------------------------------- profile.rb # == Schema Information # # Table name: profiles # # id :integer not null, primary key # user_id :integer # first_name :string(255) # last_name :string(255) # created_at :datetime not null # updated_at :datetime not null # class Profile < ActiveRecord::Base attr_accessible :first_name, :last_name belongs_to :user end ------------------------------------------- profiles_controller.rb class ProfilesController < 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 ---------------------------------------------- registrations_controller.rb class RegistrationsController < Devise::RegistrationsController protected def after_sign_up_path_for(resource) request.env[''omniauth.origin''] || stored_location_for(resource) || new_profile_path end end ----------------------------------------- application_controller.rb class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) request.env[''omniauth.origin''] || stored_location_for(resource) || show_path end end ---------------------------------------- routes.rb BaseApp::Application.routes.draw do resources :profiles get "users/show" devise_for :users, :controllers => { :registrations => "registrations" } resources :users match ''/show'', to: ''profiles#show'' match ''/signup'', to: ''users#new'' root to: ''static_pages#home'' match ''/'', to: ''static_pages#home'' … end -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
Have you checked that profile id is being passed in params[:id]? On Mon, Sep 24, 2012 at 10:18 PM, jason baguio <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> I am using Devise and am trying to allow each user to create 1 profile > (they can currently make many). I am able to send the the newly > registered user to the page where they can create a profile, but when > the User logs in it will not go to the Profile Show page - the error > message is > > (Couldn''t find Profile without an ID... > app/controllers/profiles_controller.rb:16:in `show'') > > The code (sorted by files) is below… > > > user.rb > > # == Schema Information > # > # Table name: users > # > # id :integer not null, primary key > # email :string(255) default(""), not null > # encrypted_password :string(255) default(""), not null > # reset_password_token :string(255) > # reset_password_sent_at :datetime > # remember_created_at :datetime > # sign_in_count :integer default(0) > # current_sign_in_at :datetime > # last_sign_in_at :datetime > # current_sign_in_ip :string(255) > # last_sign_in_ip :string(255) > # created_at :datetime not null > # updated_at :datetime not null > # > > class User < ActiveRecord::Base > # Include default devise modules. Others available are: > # :token_authenticatable, :confirmable, > # :lockable, :timeoutable and :omniauthable > devise :database_authenticatable, :registerable, > :recoverable, :rememberable, :trackable, :validatable > > # Setup accessible (or protected) attributes for your model > attr_accessible :email, :password, :password_confirmation, > :remember_me > # attr_accessible :title, :body > > has_one :profile > end > > > --------------------------------------- > > profile.rb > > # == Schema Information > # > # Table name: profiles > # > # id :integer not null, primary key > # user_id :integer > # first_name :string(255) > # last_name :string(255) > # created_at :datetime not null > # updated_at :datetime not null > # > > class Profile < ActiveRecord::Base > attr_accessible :first_name, :last_name > > belongs_to :user > end > > ------------------------------------------- > > > > profiles_controller.rb > > class ProfilesController < 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 > > > ---------------------------------------------- > > > > registrations_controller.rb > > class RegistrationsController < Devise::RegistrationsController > protected > > def after_sign_up_path_for(resource) > request.env[''omniauth.origin''] || stored_location_for(resource) || > new_profile_path > end > > > end > > ----------------------------------------- > > application_controller.rb > > class ApplicationController < ActionController::Base > def after_sign_in_path_for(resource) > request.env[''omniauth.origin''] || stored_location_for(resource) || > show_path > end > end > > ---------------------------------------- > > > > routes.rb > > BaseApp::Application.routes.draw do > resources :profiles > > get "users/show" > > devise_for :users, :controllers => { :registrations => "registrations" > } > resources :users > > match ''/show'', to: ''profiles#show'' > > > match ''/signup'', to: ''users#new'' > > root to: ''static_pages#home'' > > match ''/'', to: ''static_pages#home'' > > … > end > > -- > Posted via http://www.ruby-forum.com/. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit https://groups.google.com/groups/opt_out. > > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
KUL KING wrote in post #1077336:> Have you checked that profile id is being passed in params[:id]?How ought I check this? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
jason baguio wrote in post #1077357:> KUL KING wrote in post #1077336: >> Have you checked that profile id is being passed in params[:id]? > > How ought I check this?I changed changed the application_controller.rb to: class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) request.env[''omniauth.origin''] || stored_location_for(resource) || show_path(resource.profile) end end I signed up a new User and then created a Profile. After I logged out and signed back in it gave me the error: ActiveRecord::RecordNotFound in ProfilesController#show Couldn''t find Profile without an ID Any thoughts on the issue? -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.
On 09/24/2012 01:18 PM, jason baguio wrote:> I am using Devise and am trying to allow each user to create 1 > profile (they can currently make many). I am able to send the the > newly registered user to the page where they can create a profile, > but when the User logs in it will not go to the Profile Show page > - the error message is > > (Couldn''t find Profile without an ID... > app/controllers/profiles_controller.rb:16:in `show'')We dealt with a similar problem by making sure that a profile was created for every user at the time the user is created; we did this in the model after failing to convince the controller to do the right thing. In app/models/user.rb: before_save do | user | user.profile = Profile.new unless user.profile end HTH, Chris -- Chris Maden, text nerd <URL: http://crism.maden.org/ > LIVE FREE: vote for Gary Johnson, Libertarian for President. <URL: http://garyjohnson2012.com/ > <URL: http://lp.org/ > GnuPG fingerprint: DB08 CF6C 2583 7F55 3BE9 A210 4A51 DBAC 5C5C 3D5E -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit https://groups.google.com/groups/opt_out.