Find User by Token

Hi,

I have spent the last couple of hours Googling and trying any thing
that i think will work but i haven't any luck. :frowning:

Here is an outline of what I am trying to do.

I want to show a use there info by going to "http://localhost:3000/
users/5c6e957b523f931fdda3e9922b680c2d868cf44b" (random token)

This is what I have in the routes file and the controller.

# routes

Reg::Application.routes.draw do
  resources :users

  root :to => "users#new"

  match "/users/:token" => "users#show"
end

# controller

  def show
    @user = User.find(params[:token])
  end

At the moment it is giving me this error.

Started GET "/users/5c6e957b523f931fdda3e9922b680c2d868cf44b" for
127.0.0.1 at 2011-01-30 09:54:23 +1100
  Processing by UsersController#show as HTML
  Parameters: {"id"=>"5c6e957b523f931fdda3e9922b680c2d868cf44b"}
Completed in 10ms

ActiveRecord::RecordNotFound (Couldn't find User without an ID):
  app/controllers/users_controller.rb:7:in `show'

This is one of my first rails apps so I don't know exactly what is
causing it - I guess that it will be a simple thing :slight_smile:

Thanks for you help.

Hello
Can i have your view source code(I mean view in mvc).

Hello
Instead of this
def show
@user = User.find(params[:token])
end

Try
def show
@user=User.find_by_id(params[:token])
end

If id is the column in development table

if you want to find details by username you can use
@user=User.find_by_username(params[:token])

In general

@user=User.fin_by_column_name(value)

The problem is in the routes. The first match found will be what that
url is routed to, so when you declared resources :users, it defines /
users/:id to match users#show.

Try this:

Reg::Application.routes.draw do
  resources :users, :except => [:show]

  root :to => "users#new"

  match "/users/:token" => "users#show", :via => :get
end