Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Файлы Ruby: Реальный Rails

Программа урока

  • Настройка ActiveStorage в проекте
  • Базовая работа с файлами. Добавление, удаление, получение ссылки
  • Продвинутая работа с файлами. Обработка, прямая загрузка
  • Интеграции с AWS S3, Google Cloud, Microsoft Azure
# Содает миграции для ActiveStorage
bin/rails active_storage:install
bin/rails db:migrate
class User < ApplicationRecord
  has_one_attached :avatar

  validates :avatar, attached: true,
                    content_type: %i[png jpg jpeg],
                    size: { less_than: 5.megabytes }
end

Пример тестов

class VehiclesControllerTest < ActionDispatch::IntegrationTest
  setup do
    @vehicle = vehicles(:one)

    @attrs = {
      manufacture: Faker::Vehicle.manufacture,
      model: Faker::Vehicle.model,
      color: Faker::Vehicle.color,
      doors: Faker::Vehicle.doors,
      kilometrage: Faker::Vehicle.kilometrage,
      production_year: Faker::Date.backward,
      image: fixture_file_upload('hexlet.png', 'image/png')
    }
  end

  test 'should get index' do
    get vehicles_url
    assert_response :success
  end

  test 'should get new' do
    get new_vehicle_url
    assert_response :success
  end

  test 'should create vehicle' do
    post vehicles_url, params: { vehicle: @attrs }

    vehicle = Vehicle.find_by(@attrs.except(:image))

    assert { vehicle }
    assert_redirected_to vehicle_url(vehicle)
  end

  test 'should show vehicle' do
    get vehicle_url(@vehicle)
    assert_response :success
  end

  test 'should get edit' do
    get edit_vehicle_url(@vehicle)
    assert_response :success
  end

  test 'should update vehicle' do
    patch vehicle_url(@vehicle), params: { vehicle: @attrs }

    @vehicle.reload

    assert { @vehicle.manufacture == @attrs[:manufacture] }
    assert { @vehicle.model == @attrs[:model] }
    assert_redirected_to vehicle_url(@vehicle)
  end

  test 'should destroy vehicle' do
    delete vehicle_url(@vehicle)

    assert_redirected_to vehicles_url

    assert { !Vehicle.exists? @vehicle.id }
  end
end


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 5 840 ₽ в месяц
Создание веб-приложений со скоростью света
5 месяцев
c опытом
Старт 2 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»