- Создайте новое приложение 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