Skip to content
By Rachelle LeQuesne

MVC - Controller

Note: This post is intended as a supplement to WTF Just Happened? A Quick Tour of Your First Rails App.

MVC - Controller

As we have discussed in our article on REST and Rails, you will know that a Rails resource comes with seven standard methods for requesting data:

  • show
  • update
  • destroy
  • index
  • create
  • new
  • edit

Consequently we will need seven methods in our controllers, one for each of them. Rails knows this and provides it for you automatically. Below is the controller code that you get from running rails generate scaffold Post. You will notice that the relevant HTTP verb that we introduced in REST and Rails is included as a comment before each method.

class PostsController < ApplicationController
  before_action :set_post, only: [:show, :edit, :update, :destroy]

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all

  # GET /posts/1
  # GET /posts/1.json
  def show

  # GET /posts/new
  def new
    @post =

  # GET /posts/1/edit
  def edit

  # POST /posts
  # POST /posts.json
  def create
    @post =

    respond_to do |format|
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render :show, status: :created, location: @post }
        format.html { render :new }
        format.json { render json: @post.errors, status: :unprocessable_entity }

  # PATCH/PUT /posts/1
  # PATCH/PUT /posts/1.json
  def update
    respond_to do |format|
      if @post.update(post_params)
        format.html { redirect_to @post, notice: 'Post was successfully updated.' }
        format.json { render :show, status: :ok, location: @post }
        format.html { render :edit }
        format.json { render json: @post.errors, status: :unprocessable_entity }

  # DELETE /posts/1
  # DELETE /posts/1.json
  def destroy
    respond_to do |format|
      format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' }
      format.json { head :no_content }

    # Use callbacks to share common setup or constraints between actions.
    def set_post
      @post = Post.find(params[:id])

    # Never trust parameters from the scary internet, only allow the white list through.
    def post_params
      params.require(:post).permit(:title, :body)

Popular Articles by Our Team

Our expert team of designers and developers love what the do and enjoy sharing their knowledge with the world.

We Hire Only the Best

reinteractive is Australia’s largest dedicated Ruby on Rails development company. We don’t cut corners and we know what we are doing.

We are an organisation made up of amazing individuals and we take pride in our team. We are 100% remote work enabling us to choose the best talent no matter which part of the country they live in. reinteractive is dedicated to making it a great place for any developer to work.

Free Community Workshops

We created the Ruby on Rails InstallFest and Ruby on Rails Development Hub to help introduce new people to software development and to help existing developers hone their skills. These workshops provide invaluable mentorship to train developers, addressing key skills shortages in the industry. Software development is a great career choice for all ages and these events help you get started and skilled up.

  • Webinars


    Webinars are our online portal for tips, tricks and lessons learned in everything we do. Make the most of this free resource to help you become a better developer.

    Learn more about webinars

  • Installfest


    The Ruby on Rails Installfest includes a full setup of your development environment and step-by-step instructions on how to build your first app hosted on Heroku. Over 1,800 attendees to date and counting.

    Learn more about Installfest

  • Development Hub

    Development Hub

    The Ruby on Rails Development Hub is a monthly event where you will get the chance to spend time with our team and others in the community to improve and hone your Ruby on Rails skills.

    Learn more about Development Hub

Get the “reinteractive Review” Monthly Email