routes.rb Rails.application.routes.draw do
The priority is based upon order of creation: first created → highest priority.
See how all your routes lay out with “rake routes”.
You can have the root of your site routed with “root”
root ‘welcome#index’
Example of regular route:
get ‘products/:id’ => ‘catalog#view’
Example of named route that can be invoked with purchase_url(id: product.id)
get ‘products/:id/purchase’ => ‘catalog#purchase’, as: :purchase
Example resource route (maps HTTP verbs to controller actions automatically):
get ‘events’ => ‘events#index’
get ‘events/:slug’ => ‘events#show’
post ‘events’ => ‘events#create’
put ‘events/:slug’ => ‘events#update’ # This is your new PUT route
Example resource route with options:
resources :products do
member do
get ‘short’
post ‘toggle’
end
collection do
get ‘sold’
end
end
Example resource route with sub-resources:
resources :products do
resources :comments, :sales
resource :seller
end
Example resource route with more complex sub-resources:
resources :products do
resources :comments
resources :sales do
get ‘recent’, on: :collection
end
end
Example resource route with concerns:
concern :toggleable do
post ‘toggle’
end
resources :posts, concerns: :toggleable
resources :photos, concerns: :toggleable
Example resource route within a namespace:
namespace :admin do
# Directs /admin/products/* to Admin::ProductsController
# (app/controllers/admin/products_controller.rb)
resources :products
end
end
and events_controller.rb class EventsController < ApplicationController
def index
@events = Event.where(published: true)
render json: @events
end
def show
render json: find_event_by_slug_or_id
end
def create
event = Event.new(filtered_params)
if event.save
render json: event
else
render json: { errors: event.errors }, status: 422
end
end
def update
event = find_event_by_slug_or_id
if event.update(filtered_params)
render json: event
else
render json: { errors: event.errors }, status: :unprocessable_entity
end
end
private
def filtered_params
params.require(:event).permit(
:name,
:description,
:location,
:event_date,
:start_time,
:end_time,
:published
)
end
def find_event_by_slug_or_id
Event.find_by(slug: params[:slug]) || Event.find_by(id: params[:slug])
end
end
)
routes.rb Rails.application.routes.draw do
The priority is based upon order of creation: first created → highest priority.
See how all your routes lay out with “rake routes”.
You can have the root of your site routed with “root”
root ‘welcome#index’
Example of regular route:
get ‘products/:id’ => ‘catalog#view’
Example of named route that can be invoked with purchase_url(id: product.id)
get ‘products/:id/purchase’ => ‘catalog#purchase’, as: :purchase
Example resource route (maps HTTP verbs to controller actions automatically):
get ‘events’ => ‘events#index’
get ‘events/:slug’ => ‘events#show’
post ‘events’ => ‘events#create’
put ‘events/:slug’ => ‘events#update’ # This is your new PUT route
Example resource route with options:
resources :products do
member do
get ‘short’
post ‘toggle’
end
collection do
get ‘sold’
end
end
Example resource route with sub-resources:
resources :products do
resources :comments, :sales
resource :seller
end
Example resource route with more complex sub-resources:
resources :products do
resources :comments
resources :sales do
get ‘recent’, on: :collection
end
end
Example resource route with concerns:
concern :toggleable do
post ‘toggle’
end
resources :posts, concerns: :toggleable
resources :photos, concerns: :toggleable
Example resource route within a namespace:
namespace :admin do
# Directs /admin/products/* to Admin::ProductsController
# (app/controllers/admin/products_controller.rb)
resources :products
end
end
and events_controller.rb class EventsController < ApplicationController
def index
@events = Event.where(published: true)
render json: @events
end
def show
render json: find_event_by_slug_or_id
end
def create
event = Event.new(filtered_params)
if event.save
render json: event
else
render json: { errors: event.errors }, status: 422
end
end
def update
event = find_event_by_slug_or_id
if event.update(filtered_params)
render json: event
else
render json: { errors: event.errors }, status: :unprocessable_entity
end
end
private
def filtered_params
params.require(:event).permit(
:name,
:description,
:location,
:event_date,
:start_time,
:end_time,
:published
)
end
def find_event_by_slug_or_id
Event.find_by(slug: params[:slug]) || Event.find_by(id: params[:slug])
end
end
)