maluss
maluss

Reputation: 662

Modify routes in rails

I'm a new user of rails so it's complicated to understand how the routes.rb works! So I try to modify a route, I got a path that look like this: user/:id/edit but i want that the id not appear in the path.

I try to use this method :

get '/users/:id/edit', to: 'users#edit', as: 'users/edit'

but it changes nothing. In my routes.rb i got :

resources :users,  only: [:create, :new, :show, :edit]

Someone know how to do this? I already take a look at this guide

Upvotes: 1

Views: 1958

Answers (2)

Sravan
Sravan

Reputation: 18647

If you have taken,

resources :users

Now change this route as follows,

get '/users/edit', to: 'users#edit', as: 'users_edit'

Now in your view file where you have edit link, change the link to,

<%= link_to 'Edit', users_edit_path(:id => user.id) %>

Now this links to the edit action of users controller with an id parameter.

Now, in the users controller file,

class UsersController < ApplicationController

  def edit

    // params[:id] will be the ID that you sent through the view file.
    @user = User.find(params[:id])

  end

end  

Thats it, you are done with your custom route, now the route will be users/edit instead of users/:id/edit

Upvotes: 1

Roman Kiselenko
Roman Kiselenko

Reputation: 44360

If you already take a look at guides, do you read about singular resources?

Sometimes, you have a resource that clients always look up without referencing an ID. For example, you would like /profile to always show the profile of the currently logged in user. In this case, you can use a singular resource to map /profile (rather than /profile/:id) to the show action:

resource :geocoder

creates six different routes in your application, all mapping to the Geocoders controller:

GET          /geocoder/new  geocoders#new   return an HTML form for creating the geocoder
POST         /geocoder  geocoders#create    create the new geocoder
GET          /geocoder  geocoders#show  display the one and only geocoder resource
GET          /geocoder/edit geocoders#edit  return an HTML form for editing the geocoder
PATCH/PUT    /geocoder  geocoders#update    update the one and only geocoder resource
DELETE       /geocoder  geocoders#destroy   delete the geocoder resource

Upvotes: 2

Related Questions