Theguild logo

The Guild — A Blog About Development and Geekery

Written & Filmed by Kabisa

Rails generate model: be specific

Ariejan de vroom

Ariejan de Vroom – 27 November 2015
282 words in about 2 minutes

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:

1
rails generate product

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

1
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.

1
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:

1
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:

1
rails generate product sku:string{12}

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

1
rails generate product price:decimal{10,2}

Indices / Indexes

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

1
2
3
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.

1
rails generate user password:digest

And the same goes for has_secure_token.

1
rails generate user auth_token:token

That’s it. Happy generating.

This article was originally posted at ariejan.net

Ariejan de vroom

Ariejan de Vroom

Software Engineer • CodeRetreat Facilitator • Ruby, Go and C Programmer • Electronics Apprentice

At Kabisa, privacy is of the greatest importance. We think it is important that the data our visitors leave behind is handled with care. For example, you will not find tracking cookies from third parties such as Facebook, Hotjar or Hubspot on our website. Only cookies from Google and Vimeo are used in order to improve the user experience of our visitors. These cookies also ensure that relevant advertisements are displayed. Read more about the use of cookies in our privacy statement.