1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
|
---
layout: default
title: Generators
parent: How-to guide
---
# Generators
The generator accepts a component name and a list of arguments.
To create an `ExampleComponent` with `title` and `content` attributes:
```console
bin/rails generate component Example title content
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke erb
create app/components/example_component.html.erb
```
## Generating namespaced components
To generate a namespaced `Sections::ExampleComponent`:
```console
bin/rails generate component Sections::Example title content
create app/components/sections/example_component.rb
invoke test_unit
create test/components/sections/example_component_test.rb
invoke erb
create app/components/sections/example_component.html.erb
```
## Options
You can specify options when running the generator. To alter the default values project-wide, define the configuration settings described in [API docs](/api.html#configuration).
Generated ViewComponents are added to `app/components` by default. Set `config.view_component.view_component_path` to use a different path.
### Override template engine
ViewComponent includes template generators for the `erb`, `haml`, and `slim` template engines and will default to the template engine specified in `config.generators.template_engine`.
```console
bin/rails generate component Example title --template-engine slim
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke slim
create app/components/example_component.html.slim
```
### Override test framework
By default, `config.generators.test_framework` is used.
```console
bin/rails generate component Example title --test-framework rspec
create app/components/example_component.rb
invoke rspec
create spec/components/example_component_spec.rb
invoke erb
create app/components/example_component.html.erb
```
### Generate a [preview](/guide/previews.html)
Since 2.25.0
{: .label }
```console
bin/rails generate component Example title --preview
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke preview
create test/components/previews/example_component_preview.rb
invoke erb
create app/components/example_component.html.erb
```
### Generate a [Stimulus controller](/guide/javascript_and_css.html#stimulus)
Since 2.38.0
{: .label }
```console
bin/rails generate component Example title --stimulus
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke stimulus
create test/components/example_component_controller.js
invoke erb
create app/components/example_component.html.erb
```
To always generate a Stimulus controller, set `config.view_component.generate_stimulus_controller = true`.
### Generate [locale files](/guide/translations.html)
Since 2.47.0
{: .label }
```console
bin/rails generate component Example title --locale
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke locale
create app/components/example_component.yml
invoke erb
create app/components/example_component.html.erb
```
To always generate locale files, set `config.view_component.generate_locale = true`.
To generate translations in distinct locale files, set `config.view_component.generate_distinct_locale_files = true` to generate as many files as configured in `I18n.available_locales`.
### Place the view in a sidecar directory
Since 2.16.0
{: .label }
```console
bin/rails generate component Example title --sidecar
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke erb
create app/components/example_component/example_component.html.erb
```
To always generate in the sidecar directory, set `config.view_component.generate.sidecar = true`.
### Use [inline rendering](/guide/templates.html#inline) (no template file)
Since 2.24.0
{: .label }
```console
bin/rails generate component Example title --inline
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke erb
```
### Specify the parent class
Since 2.41.0
{: .label }
By default, `ApplicationComponent` is used if defined, `ViewComponent::Base` otherwise.
```console
bin/rails generate component Example title content --parent MyBaseComponent
create app/components/example_component.rb
invoke test_unit
create test/components/example_component_test.rb
invoke erb
create app/components/example_component.html.erb
```
To always use a specific parent class, set `config.view_component.component_parent_class = "MyBaseComponent"`.
### Skip collision check
The generator prevents naming collisions with existing components. To skip this check and force the generator to run, use the `--skip-collision-check` or `--force` option.
|