73 lines
2.2 KiB
Markdown
73 lines
2.2 KiB
Markdown
|
+++
|
||
|
date = "2015-11-27"
|
||
|
title = "Rails generate model: be specific"
|
||
|
tags = ["rails"]
|
||
|
description = "Rails offers some very useful generators, one of which creates new model, including migrations. But did you know you can get into the specifics right from the command line?"
|
||
|
slug = "rails-generate-model-be-specific"
|
||
|
+++
|
||
|
|
||
|
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.
|