Skip to content

Instantly share code, notes, and snippets.

@davidpaulhunt
Last active February 18, 2019 23:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidpaulhunt/cc5acdf7c29725192eb21197a6e53c47 to your computer and use it in GitHub Desktop.
Save davidpaulhunt/cc5acdf7c29725192eb21197a6e53c47 to your computer and use it in GitHub Desktop.
Rails 6 (Beta) Generator Help

Controller

Description:

Stubs out a new controller and its views. Pass the controller name, either
CamelCased or under_scored, and a list of views as arguments.

To create a controller within a module, specify the controller name as a
path like 'parent_module/controller_name'.

This generates a controller class in app/controllers and invokes helper,
template engine, assets, and test framework generators.

Usage:

rails generate controller NAME [action action] [options]

Options:

      [--skip-namespace], [--no-skip-namespace]  # Skip namespace (affects only isolated applications)
      [--skip-routes], [--no-skip-routes]        # Don't add routes to config/routes.rb.
      [--helper], [--no-helper]                  # Indicates when to generate helper
                                                 # Default: true
      [--assets], [--no-assets]                  # Indicates when to generate assets
                                                 # Default: true
  -e, [--template-engine=NAME]                   # Template engine to be invoked
                                                 # Default: erb
  -t, [--test-framework=NAME]                    # Test framework to be invoked

Asset options:

  -y, [--stylesheets], [--no-stylesheets]       # Generate Stylesheets
                                                # Default: true
  -se, [--stylesheet-engine=STYLESHEET_ENGINE]  # Engine for Stylesheets
                                                # Default: scss

Runtime options:

  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist

Example:

`rails generate controller CreditCards open debit credit close`

CreditCards controller with URLs like /credit_cards/debit.
    Controller: app/controllers/credit_cards_controller.rb
    Test:       test/controllers/credit_cards_controller_test.rb
    Views:      app/views/credit_cards/debit.html.erb [...]
    Helper:     app/helpers/credit_cards_helper.rb

Model

Description:

Stubs out a new model. Pass the model name, either CamelCased or
under_scored, and an optional list of attribute pairs as arguments.

Attribute pairs are field:type arguments specifying the
model's attributes. Timestamps are added by default, so you don't have to
specify them by hand as 'created_at:datetime updated_at:datetime'.

As a special case, specifying 'password:digest' will generate a
password_digest field of string type, and configure your generated model and
tests for use with Active Model has_secure_password (assuming the default ORM
and test framework are being used).

You don't have to think up every attribute up front, but it helps to
sketch out a few so you can start working with the model immediately.

This generator invokes your configured ORM and test framework, which
defaults to Active Record and TestUnit.

Finally, if --parent option is given, it's used as superclass of the
created model. This allows you create Single Table Inheritance models.

If you pass a namespaced model name (e.g. admin/account or Admin::Account)
then the generator will create a module with a table_name_prefix method
to prefix the model's table name with the module name (e.g. admin_accounts)

Usage:

rails generate model NAME [field[:type][:index] field[:type][:index]] [options]

Options:

      [--skip-namespace], [--no-skip-namespace]  # Skip namespace (affects only isolated applications)
      [--force-plural], [--no-force-plural]      # Forces the use of the given model name
  -o, --orm=NAME                                 # ORM to be invoked
                                                 # Default: active_record

ActiveRecord options:

      [--migration], [--no-migration]        # Indicates when to generate migration
                                             # Default: true
      [--timestamps], [--no-timestamps]      # Indicates when to generate timestamps
                                             # Default: true
      [--parent=PARENT]                      # The parent class for the generated model
      [--indexes], [--no-indexes]            # Add indexes for references and belongs_to columns
                                             # Default: true
      [--primary-key-type=PRIMARY_KEY_TYPE]  # The type for primary key
  db, [--database=DATABASE]                  # The database for your model's migration. By default, the current environment's primary database is used.
  -t, [--test-framework=NAME]                # Test framework to be invoked

Runtime options:

  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist

Available field types:

Just after the field name you can specify a type like text or boolean.
It will generate the column with the associated SQL type. For instance:

    `rails generate model post title:string body:text`

will generate a title column with a varchar type and a body column with a text
type. If no type is specified the string type will be used by default.

You can use the following types:

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

You can also consider references as a kind of type. For instance, if you run:

rails generate model photo title:string album:references
It will generate an `album_id` column. You should generate these kinds of fields when
you will use a `belongs_to` association, for instance. `references` also supports
polymorphism, you can enable polymorphism like this:

    `rails generate model product supplier:references{polymorphic}`

For integer, string, text and binary fields, an integer in curly braces will
be set as the limit:

    `rails generate model user pseudo:string{30}`

For decimal, two integers separated by a comma in curly braces will be used
for precision and scale:

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

You can add a `:uniq` or `:index` suffix for unique or standard indexes
respectively:

    `rails generate model user pseudo:string:uniq`
    `rails generate model user pseudo:string:index`

You can combine any single curly brace option with the index options:

    `rails generate model user username:string{30}:uniq`
    `rails generate model product supplier:references{polymorphic}:index`

If you require a `password_digest` string column for use with
has_secure_password, you can specify `password:digest`:

    `rails generate model user password:digest`

If you require a `token` string column for use with
has_secure_token, you can specify `auth_token:token`:

    `rails generate model user auth_token:token`

Examples:

    `rails generate model account`

        For Active Record and TestUnit it creates:

            Model:      app/models/account.rb
            Test:       test/models/account_test.rb
            Fixtures:   test/fixtures/accounts.yml
            Migration:  db/migrate/XXX_create_accounts.rb

    `rails generate model post title:string body:text published:boolean`

        Creates a Post model with a string title, text body, and published flag.

    `rails generate model admin/account`

        For Active Record and TestUnit it creates:

            Module:     app/models/admin.rb
            Model:      app/models/admin/account.rb
            Test:       test/models/admin/account_test.rb
            Fixtures:   test/fixtures/admin/accounts.yml
            Migration:  db/migrate/XXX_create_admin_accounts.rb

Scaffold

Description:

Scaffolds an entire resource, from model and migration to controller and
views, along with a full test suite. The resource is ready to use as a
starting point for your RESTful, resource-oriented application.

Pass the name of the model (in singular form), either CamelCased or
under_scored, as the first argument, and an optional list of attribute
pairs.

Attributes are field arguments specifying the model's attributes. You can
optionally pass the type and an index to each field. For instance:
'title body:text tracking_id:integer:uniq' will generate a title field of
string type, a body with text type and a tracking_id as an integer with an
unique index. "index" could also be given instead of "uniq" if one desires
a non unique index.

As a special case, specifying 'password:digest' will generate a
password_digest field of string type, and configure your generated model,
controller, views, and test suite for use with Active Model
has_secure_password (assuming they are using Rails defaults).

Timestamps are added by default, so you don't have to specify them by hand
as 'created_at:datetime updated_at:datetime'.

You don't have to think up every attribute up front, but it helps to
sketch out a few so you can start working with the resource immediately.

For example, 'scaffold post title body:text published:boolean' gives
you a model with those three attributes, a controller that handles
the create/show/update/destroy, forms to create and edit your posts, and
an index that lists them all, as well as a resources :posts declaration
in config/routes.rb.

If you want to remove all the generated files, run
'rails destroy scaffold ModelName'.

Examples:

  • rails generate scaffold post
  • rails generate scaffold post title:string body:text published:boolean
  • rails generate scaffold purchase amount:decimal tracking_id:integer:uniq
  • rails generate scaffold user email:uniq password:digest

Usage:

rails generate scaffold NAME [field[:type][:index] field[:type][:index]] [options]

Options:

      [--skip-namespace], [--no-skip-namespace]             # Skip namespace (affects only isolated applications)
      [--force-plural], [--no-force-plural]                 # Forces the use of the given model name
  -o, --orm=NAME                                            # ORM to be invoked
                                                            # Default: active_record
      [--model-name=MODEL_NAME]                             # ModelName to be used
      [--resource-route], [--no-resource-route]             # Indicates when to generate resource route
                                                            # Default: true
      [--api], [--no-api]                                   # Indicates when to generate api
  -y, [--stylesheets], [--no-stylesheets]                   # Generate Stylesheets
                                                            # Default: true
  -se, [--stylesheet-engine=STYLESHEET_ENGINE]              # Engine for Stylesheets
                                                            # Default: scss
      [--assets], [--no-assets]                             # Indicates when to generate assets
                                                            # Default: true
  -ss, [--scaffold-stylesheet], [--no-scaffold-stylesheet]  # Indicates when to generate scaffold stylesheet
                                                            # Default: true
  -c, --scaffold-controller=NAME                            # Scaffold controller to be invoked
                                                            # Default: scaffold_controller

ActiveRecord options:

      [--migration], [--no-migration]        # Indicates when to generate migration
                                             # Default: true
      [--timestamps], [--no-timestamps]      # Indicates when to generate timestamps
                                             # Default: true
      [--parent=PARENT]                      # The parent class for the generated model
      [--indexes], [--no-indexes]            # Add indexes for references and belongs_to columns
                                             # Default: true
      [--primary-key-type=PRIMARY_KEY_TYPE]  # The type for primary key
  db, [--database=DATABASE]                  # The database for your model's migration. By default, the current environment's primary database is used.
  -t, [--test-framework=NAME]                # Test framework to be invoked

ScaffoldController options:
      [--helper], [--no-helper]      # Indicates when to generate helper
                                     # Default: true
  -e, [--template-engine=NAME]       # Template engine to be invoked
                                     # Default: erb
      [--jbuilder], [--no-jbuilder]  # Indicates when to generate jbuilder
                                     # Default: true

Runtime options:

  -f, [--force]                    # Overwrite files that already exist
  -p, [--pretend], [--no-pretend]  # Run but do not make any changes
  -q, [--quiet], [--no-quiet]      # Suppress status output
  -s, [--skip], [--no-skip]        # Skip files that already exist
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment