DEV Community

Cindy
Cindy

Posted on • Updated on

Rails Routes - CRUD & RESTful

CRUD

C = Create
R = Read
U = Update
D = Delete

CRUD are the four ways we can interact with data. These are the basic functions that all models should have.

REST = Representation State Transfer
REST is an architectural pattern for defining routes. It is a way of connecting the HTTP verbs (GET, POST, PATCH/PUT, DELETE) and the CRUD actions. RESTful routing allow developers to keep things simple and consistent for other developers or users to use.

Imagine we had the model / class: Recipe

Create

Need to be able to create a new class object and save the object to the database.

Create the routes - two parts.

First - GET the HTML form to create new object, in this case, recipe.

# In the routes file
get '/recipes/new', to: 'recipes#new', as: 'new_recipe'

- get = HTTP verb
- '/recipes/new' = route
- recipes = controller name
- new = action that will be in the controller file

* as: is an option that you can use to rename your route if needed

This is what the controller action would look like in the controller file:

# In the recipes_controller.rb file

class RecipesController < ApplicationController

def new
end

end

Second - POST the new recipe

post '/recipes', to: 'recipes#create'

- post = HTTP verb
- '/recipes' = route
- recipes = controller name
- create = action
# In the recipes_controller.rb file

class RecipesController < ApplicationController

def new
end

def create
end

end

Read

There are two ways we can read / get data from the database. We can get all of the objects, recipes, of a class or a specific object of a class.

get '/recipes', to: 'recipes#index'

- index = action

Index page will render the index view page that will display all the objects of a class.

get '/recipes/:id', to: 'recipes#show'

- :id = id of the record / object that was 
automatically assigned when record was created in 
the database

The id number is needed in order to find the object and then render the show page (show view) of that specific object.

# In the recipes_controller.rb file

class RecipesController < ApplicationController

def new
end

def index
end

def show
end

end

Update

Also has two parts:

First - Need route and controller action to render the edit form (edit view).

get '/recipes/:id', to: 'recipes#edit'

Note: Need to pass in id number again in order to find the specific object we want to edit.

Second - Need route and controller action to update the object

patch/put '/recipes/:id', to: 'recipes#update'

- patch & put = HTTP verbs. Use patch when you
 want to make a small change to the object. Use 
put when you want to replace everything.
# In the recipes_controller.rb file

class RecipesController < ApplicationController

def new
end

def create
end

def index
end

def show
end

def edit
end

def update
end

end

Delete

Use to delete a record / object from database.

delete '/recipes/:id', to: 'recipes#destroy'
# In the recipes_controller.rb file

class RecipesController < ApplicationController

def new
end

def create
end

def index
end

def show
end

def edit
end

def update
end

def destroy
end

end

A shortcut to get all seven of these routes in rails is to write:

resources :recipes

You can also limit down to specific routes by using only. Just list the routes you need.

resources :recipes, only: [:new, :create, :show]

Top comments (0)