1. Создайте новое приложение Rails под названием «devise_roles»:
rails new devise_roles

2. Изменения в каталоге приложения:

cd devise_roles

3. Добавьте гем Devise в свой Gemfile:

bundle add devise

4. Запустите генератор установки Devise:

rails g devise:install

5. Создайте модель пользователя с атрибутом роли:

rails g devise User role:integer

6. Откройте сгенерированный файл миграции для модели пользователя (`db/migrate/‹timestamp›_devise_create_users.rb`) и установите роль по умолчанию на 0:

t.integer :role, default: 0

7. Запустите миграцию базы данных:

rails db:migrate

8. Создайте контроллер под названием «pages» с действием под названием «home»:

rails g controller pages home

9. Обновите файл `config/routes.rb`, чтобы установить корень для действия pages#index:

root 'pages#index'

10. Создайте файл представления для домашнего действия (`app/views/pages/home.html.erb`) со следующим содержимым:

<% if current_user %>
       <p>Hello <%= current_user&.email %></p><br>
       <p>You are Role: <%= current_user&.role %></p><br>
       <% if current_user.admin? %>
         <p>User Total count <%= User.count %></p>
       <% end %>
       <%= link_to "Log Out", destroy_user_session_path, 'data-turbo-method': :delete %>
     <% else %>
       <p>You are not signed in</p>
       <p>
         <%= link_to "Sign up", new_user_registration_path %><br>
         <%= link_to "Login", new_user_session_path %>
       </p>
     <% end %>11. Generate the Devise views for customization:
rails g devise:views

12. Обновите форму регистрации (`app/views/devise/registrations/new.html.erb`), добавив `data-turbo: false` для кнопки отправки:

<%= f.submit "Sign up", data: { turbo: false } %>

13. Обновите ссылку на удаление сеанса в главном представлении (`/app/views/devise/sessions/new.html.erb`), включив в нее `'data-turbo-method': :delete`:

<%= link_to "Log Out", destroy_user_session_path, 'data-turbo-method': :delete %>14. Add role enumeration to the User model (`app/models/user.rb`) using the `enum` macro and set a default role using the `after_initialize` callback:
enum role: [:user, :moderator, :admin]

 after_initialize :set_default_role, if: :new_record?

 def set_default_role
   self.role ||= :user
 end