Chris Mendez in For Developers, Ruby

Rails: Command Line Cheatsheet

Unless you regularly work with Rails, it's inevitable that you'll end up forgetting the various commands aimed at making your life easy. Although Googling your questions is always a good approach to solving problems, I find this cheatsheet (and boilerplate app) to be slightly more helpful.

Basic Command Line

Rails generate is a command line tool that can help you quickly build Models, Controllers, tests, etc for your app.

Here's how you get quickly get an inventory of everything Rails g can do.

rails g -h
Rails:
  assets
  channel
  controller
  generator
  helper
  integration_test
  jbuilder
  job
  mailer
  migration
  model
  resource
  scaffold
  scaffold_controller
  task

Source

Common Commands

Create a Model and name it something singular.

rails g model my_model

Create a Controller and take notice of the pluralization.

rails g controller my_controllers

Update your database schema

rails db:migrate

Create a task

rails g task my_task action_one action_two

Advanced Command Line

Once you get the hang of using rails g, the next step is to start decorating it with data types, modifiers, etc.

Adding Datatypes

Datatypes help provide context about the Models you are making by describing them as Floating Point Numbers, Strings, Text, Integers, etc. By including a :datatype to your model, Rails will set up the database column to perfectly handle the object.

List of Data Types You Can Use

integer
primary_key
decimal
float
boolean
binary
string
text
date
time
datetime
timestamp

Create a Unique user with an index

rails g model user user_name:string:uniq

Adding Modifiers

Modifiers are inserted through curly braces and they allow you to include things such as null and limit.

Add an age to a Friend with a limit

rails g model friend age:integer{2}

Add a price to a product with 2 decimals

rails g model product 'price:decimal{10,2}'

Source


Tokens

Rails 5 now offers a way to provide token-based API access through the has_secure_token method.

Create a unique auth_token that can also be indexed.

rails g model User full_name:string password_digest:string auth_token:token password_reset_token:token description:text

Adding a Unique Token using rails g migration

rails g migration add_another_token_to_users another_token:token:unique

Append a token to an existing model.

rails g migration add_token_to_users my_token:token

Regenerating a token

You can use the regenerate_[name_of_token] pattern to create a new token. For example, in the rails migration above, here's an example of issuing a new password_reset_token

user = User.new
user.save
user.password_reset_token
user.regenerate_password_reset_token

Polymorphism

Suppose your building a collaborative app (like Pivotal Tracker and you want to add comments to projects, tasks, and attachments. You can do that by making comments polymorphic.

rails g model Comment body:text commentable:references{polymorphic}:index

Source

Single Table Inheritance

This will create a single inheritence.

rails g model admin --parent user

Source


Undo a rails generate

Undo a scaffold

rails d scaffold my_scaffold

Undo a model

rails d model my_model

Undo a controller

rails d controller my_controller

Views

Adding views to an existing model (Method #1)

Run a scaffold but skip the migration and don't overwrite the previous model.

rails g scaffold User --migration=false --skip

Adding views to an existing model (Method #2)

Use the erb templating engine and explicitly announce the fields.

rails g erb:scaffold User firstname lastname reputation

Source


Serializer

Scaffold works pretty much like always but if you decide to use the --api edition of rails, you will get a serializer instead of views.

Create a scaffold after a model has been created

rails g scaffold User --migration=false --skip

Authentication

When you're building an API-only app, it's unusual to use cookies, sessions and a heap of other browser-centric tools.

Instead, you'll want to use Javascript Web Tokens (JWT) and a token-based gem package like knock or devise.


Devise

Validate e-mail

validates_format_of :email,:with => Devise::email_regexp

Source