Rails Generators

Mwai
2 min readAug 8, 2022
A diesel power generator

The rails generate command, or rails g saves you alot of time writing the same thing every time you create a new app. It literally gives you power…to create amazing apps with less physical effort.

Model

Let’s say we’re setting up our app’s backend and we want to generate a Post model. Running rails generate model Post title body will show the following in your terminal:


invoke active_record
create db/migrate/20220808114022_create_posts.rb
create app/models/post.rb
invoke test_unit
create test/models/post_test.rb
create test/fixtures/posts.yml

And create these files:

********* db/migrate/20220808114022_create_posts.rbclass CreatePosts < ActiveRecord::Migration[7.0]def changecreate_table :posts do |t|t.string :titlet.string :bodyt.timestampsendendend*************app/models/post.rbclass Post < ApplicationRecordend

Resource

Say you ran

rails g resource User username password_digest

This is what would show in the terminal:

invoke active_record
create db/migrate/20220808114816_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
invoke controller
create app/controllers/users_controller.rb
invoke erb
create app/views/users
invoke test_unit
create test/controllers/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke resource_route
route resources :users

And all these files ready for you in your editor:

**********db/migrate/20220808114816_create_users.rbclass CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name
t.string :username
t.string :password_digest
t.timestamps
end
end
************* app/models/user.rb
class User < ApplicationRecord
end
**************app/controllers/users_controller.rbclass UsersController < ApplicationController
end
***************routes in config/routes.rbRails.application.routes.draw do
resources :users
end

Scaffold

Now this is where things get interesting or wild depending on what programming framework you were using before.

Scaffold generates everything resource generates plus a controller with public methods for basic CRUD operations as well as a few private methods.

Running

rails g scaffold User username password_digest 

brings forth this in the controllers folder:

class UsersController < ApplicationController
before_action :set_user, only: [:show, :update, :destroy]
# GET /users
def index
@users = User.allrender json: @users
end
# GET /users/1
def show
render json: @user
end
# POST /users
def create
@user = User.new(user_params)if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# PATCH/PUT /users/1
def update
if @user.update(user_params)
render json: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
# DELETE /users/1
def destroy
@user.destroy
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end# Only allow a trusted parameter "white list" through.
def user_params
params.require(:user).permit(:name, :username, :email)
end
end
Unlisted

--

--