Skip to main content

Rails generate model: be specific

·264 words·2 mins· ·
Rails
Ariejan de Vroom
Author
Ariejan de Vroom
Jack of all Trades, Professional Software Craftsman
Table of Contents

Rails can generate a lot of things for you. Personally I use generate model often to quickly setup a new model, including test files and a database migration. In its simplest form it looks like this:

rails generate product

This will get you started with a naked Product model. To make things easier, you can also supply attribute names:

rails generate product name description:text 

Optionally, you can tell the generator what type of attribute you want. You can choose from the same types as you’d normally use in your migration:

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

Now, that’s not where it ends. Here are some more useful tricks:

Associations
#

You can specify that your model references another. Our Product might belong_to a Category.

rails generate product category:references

This generates the category_id attribute automatically. In some cases you might want to use a polymorphic relation instead, no problem:

rails generate product supplier:references{polymorphic}

Limits
#

For string, text, integer and binary fields, you can set the limit by supplying it in curly braces:

rails generate product sku:string{12}

For decimal you must supply two values for precision and scale:

rails generate product price:decimal{10,2}

Indices / Indexes
#

You can also set indices (unique or not) on specific fields as well:

rails generate product name:string:index
rails generate product sku:string{12}:uniq
rails generate product supplier:references{polymorphic}:index

Password digests and tokens
#

If you want to store password digests using has_secure_password, you can also use the digest type.

rails generate user password:digest

And the same goes for has_secure_token.

rails generate user auth_token:token

That’s it. Happy generating.

Related

Testing with MiniTest
·1249 words·6 mins
Testing Tdd Bdd Minitest Rails Ruby
Rails: Prevent Accidental Debugging Commits
·494 words·3 mins
Rails Git
Deploying with git-deploy
·1031 words·5 mins
Deployment Git Rails Devops