Skip to main content
This is a backend customization. You need to perform it in the backend directory if you used create-spree-app to set up your Spree application.
Now that we’ve created the Brand model, let’s create an Admin Dashboard interface so admins can manage brands — including editing the rich text description and uploading the logo.

Step 1: Scaffold the Admin UI

The Admin Scaffold generator creates a complete admin section for a resource:
This will create the following files: It will also automatically add the following routes to your config/routes.rb file:
config/routes.rb
You will now be able to access the brands resource at http://localhost:3000/admin/brands in your browser. To reference this route in your code, you can use the spree.admin_brands_path helper.

Step 2: Add the Description Editor and Logo Upload

The generated form only knows about the name column. Let’s add the rich text editor for description and the upload field for logo using Spree’s admin form builder:
app/views/spree/admin/brands/_form.html.erb
  • spree_rich_text_area renders a WYSIWYG editor (Trix) for the Action Text description.
  • spree_file_field handles drag-and-drop upload, image preview, and direct upload to storage. Add crop: true to enable image cropping with a recommended-size indicator.
Then permit the two new attributes in the controller:
app/controllers/spree/admin/brands_controller.rb
Open http://localhost:3000/admin/brands/new, create a brand with a formatted description and a logo — everything saves through the standard form.

Step 3: Customize the Table Columns

The scaffold generator creates a table initializer at config/initializers/spree_admin_brands_table.rb with default columns:
config/initializers/spree_admin_brands_table.rb

Show the logo next to the name

To render the logo thumbnail in the name column — the same pattern the Products table uses — switch the column to a custom partial:
config/initializers/spree_admin_brands_table.rb
And create the partial:
app/views/spree/admin/tables/columns/_brand_name.html.erb
For complete table customization options including column types, filtering, sorting, and bulk actions, see the Admin Tables guide.

Step 4: Customize Navigation

The scaffold generator also creates a navigation initializer at config/initializers/spree_admin_brands_navigation.rb:
config/initializers/spree_admin_brands_navigation.rb
You can customize the icon and position to fit your needs. For example, to use the “award” icon and place it between Products (30) and Customers (40):

Adding to an Existing Submenu

To add “Brands” to the Products submenu instead, use the parent option:
config/initializers/spree_admin_brands_navigation.rb
After restarting your server, you’ll see the new “Brands” navigation link in the admin sidebar!
For complete navigation API documentation including all available options, submenu creation, badges, and more, see the Admin Navigation guide. The form helpers used in Step 2 are documented in Form Builder and Components.

Next Step

Brands are manageable in the admin. Now let’s connect them to Products: Extending Core Models.