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