Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+659новых вакансий за сутки·52 454вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 688
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 392 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 033
  • Облачные технологии5 085
  • QA вакансии1 814
  • Android1 134
  • Инженер данных831
  • Продакт-менеджер339

Разработка

  • iOS1 084
  • Backend вакансии1 031
  • Fullstack вакансии444
  • AI вакансии385
  • Frontend вакансии371
  • Mobile вакансии27

По стеку

  • Go3 416
  • Java2 070
  • Kotlin926
  • Node.js731
  • Rust514
  • .NET462
  • PHP267
  • C++223
  • C#195

DevOps и инфраструктура

  • Kubernetes2 931
  • Linux-инфраструктура2 312
  • DevOps вакансии1 844
  • Terraform / IaC1 714
  • CI/CD872
  • Мониторинг и Observability825
  • SRE253
  • Кибербезопасность50

Аналитика и данные

  • Аналитик данных497
  • Data Scientist463
  • Бизнес-аналитик374
  • Системный аналитик54

Другие направления

  • Проджект-менеджер119
  • UI/UX дизайн72
  • Ручное тестирование14

По регионам

  • Вакансии в США25 531
  • Вакансии в Европе9 792
  • Работа в России3 193
  • Вакансии в Канаде2 236

По формату

  • Удалённые вакансии43 578
  • Релокация в США25 531
  • Гибридная работа4 289
  • Офисная работа3 340

По уровню

  • Senior вакансии21 650
  • Middle вакансии12 211
  • Junior вакансии3 886

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise94 вакансии
  • Infobip28 вакансий
  • Spotify18 вакансий
  • Celonis17 вакансий
  • Darktrace17 вакансий
  • Adyen13 вакансий
  • UiPath13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Ruby on RailsВсе вопросы
Ruby on RailsJuniorТеория

Что такое migrations в Rails и как их создавать и запускать?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Migrations — Ruby-классы в db/migrate/, описывающие изменения схемы БД. Создают через rails generate migration, применяют командой rails db:migrate, откатывают через db:rollback.

Создание миграции

Генератор создаёт файл в каталоге db/migrate/ с именем вида YYYYMMDDHHMMSS_название.rb:

rails generate migration CreateProducts name:string price:decimal
rails generate migration AddStockToProducts stock:integer
rails generate migration RemoveDescriptionFromProducts description:text

Rails автоматически распознаёт префиксы Add*To*, Remove*From*, Create* и генерирует тело класса. Файл выглядит так:

class CreateProducts < ActiveRecord::Migration[7.1]
  def change
    create_table :products do |t|
      t.string  :name,  null: false
      t.decimal :price, precision: 10, scale: 2

      t.timestamps
    end
    add_index :products, :name, unique: true
  end
end

Migrations в Rails: создание и запуск

Migrations — это классы Ruby, которые описывают изменения схемы базы данных в виде кода. Они позволяют версионировать структуру БД наравне с исходным кодом и воспроизводить её на любой машине.

Основные методы

  • create_table / drop_table — создание и удаление таблицы.
  • add_column / remove_column — добавление и удаление столбца.
  • change_column, rename_column — изменение типа или имени.
  • add_index / remove_index — управление индексами.
  • add_reference — добавляет _id-столбец и опциональный внешний ключ.
  • execute — произвольный SQL для нестандартных операций.

Метод change vs up/down

Метод change автоматически строит обратную операцию (rollback). Если Rails не умеет это сделать автоматически, нужно явно описать up и down:

class ChangeProductsPrice < ActiveRecord::Migration[7.1]
  def up
    change_column :products, :price, :numeric, precision: 12, scale: 4
  end

  def down
    change_column :products, :price, :decimal, precision: 10, scale: 2
  end
end

Запуск миграций

# Применить все новые миграции
rails db:migrate

# Откатить последнюю
rails db:rollback

# Откатить несколько
rails db:rollback STEP=3

# Мигрировать до конкретной версии
rails db:migrate VERSION=20240301120000

# Статус всех миграций
rails db:migrate:status

# Пересоздать БД (dev/test)
rails db:drop db:create db:migrate db:seed

schema.rb и structure.sql

После каждого db:migrate Rails обновляет db/schema.rb (или db/structure.sql при config.active_record.schema_format = :sql). Этот файл — единственный источник истины о текущей схеме. Его нужно коммитить вместе с миграцией.

Подводные камни

  • Изменение существующих миграций. Уже применённые миграции нельзя редактировать — нужно создавать новую. Иначе чексумма в schema_migrations не совпадёт на других машинах.
  • Необратимые операции без up/down. change_column в методе change вызовет ActiveRecord::IrreversibleMigration при откате — обязательно пишите up/down.
  • Блокировка таблицы в production. add_column с default: в старых версиях PostgreSQL блокирует таблицу на всё время перезаписи строк. Используйте add_column без default, затем change_column_default.
  • Большие таблицы и zero-downtime. add_index без algorithm: :concurrently в PostgreSQL блокирует запись. Используйте add_index ..., algorithm: :concurrently и заверните в disable_ddl_transaction!.
  • Забытый db:migrate в CI/CD. Если миграция есть, а schema.rb не обновлён в репозитории, другие разработчики получают расхождение схемы.
  • Конфликты меток времени. При одновременной работе двух веток с миграциями одного времени Rails применит обе, но порядок может быть неожиданным.
  • Перенос данных внутри миграции. Вызов моделей (Product.update_all) внутри миграции опасен: если модель позже изменится, старая миграция сломается. Используйте execute с прямым SQL или создайте отдельную data-migration задачу.

Частые вопросы на собеседовании

  • Как Rails обрабатывает защиту от CSRF?
  • Что такое паттерн MVC и как Rails его реализует?
  • В каких backend-проектах Ruby on Rails является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Что такое Ruby on Rails и каковы его основные принципы (convention over configuration, DRY)?

Типичные ошибки

  • Сводить migrations к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Rails 8.1 строит приложение вокруг Rack, routing, controllers, Active Record, views и conventions over configuration.
  • Не отделять validation, authorization, transaction boundary и business logic.

Что проверяет интервьюер

  • Объясняет migrations через конкретную точку lifecycle в Ruby on Rails.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

Как вы знаете этот вопрос?

Проверить себя по теме Ruby on Rails →

Источники

  • https://guides.rubyonrails.org/active_record_migrations.html
  • https://guides.rubyonrails.org/
←Предыдущий вопросЧто такое паттерн MVC и как Rails его реализует?Следующий вопрос→В каких backend-проектах Ruby on Rails является сильным выбором, а где лучше выбрать более простой или другой стек?

Связанные темы

Ruby on RailsBackend-Engineeringruby-on-rails-ecosystem