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
endprivate
# 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