From d9bbeb4f1c0e1c55156655e2732ebc8c840a929c Mon Sep 17 00:00:00 2001 From: Ariejan de Vroom Date: Fri, 27 Nov 2015 13:23:13 +0100 Subject: [PATCH] Add post: rails gen model be specific --- ...-11-27-rails-generate-model-be-specific.md | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 content/posts/2015-11-27-rails-generate-model-be-specific.md diff --git a/content/posts/2015-11-27-rails-generate-model-be-specific.md b/content/posts/2015-11-27-rails-generate-model-be-specific.md new file mode 100644 index 0000000..47ee81e --- /dev/null +++ b/content/posts/2015-11-27-rails-generate-model-be-specific.md @@ -0,0 +1,72 @@ ++++ +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.