Search code examples
ruby-on-railsrubypathfriendly-id

User path with username


To show User's profile I used their id. In controller:

@user = User.find(params[:id])

In routes:

get ':id' => 'users#show'

But now I try new way with username:

get ':username' => 'users#show' #route

@user = User.find_by(username: params[:username]) #controller

And when I go to user's profile with /username I see error: undefined method posts. In controller I get user's posts. But now it doesn't works. Please tell me why? And I have one more question. When I go to /users or /posts or something else, my app thinks, that I go to uset's page. How to fix it? And what to do, if user sign up with, for example, username: "users"?


Solution

  • Artyom you can use the friendly-id gem if you want to make this process easier on you. Ryan Bates has a Railscast on it as well.

    That way you can use strings as ids (i.e. your username) in the url:

    http://localhost:3000/articles/hello-world
    

    Let me know if you have any questions,

    -Dave