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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 901
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 324
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 240
  • Backend вакансии1 212
  • AI вакансии553
  • Fullstack вакансии503
  • Frontend вакансии428
  • Mobile вакансии28

По стеку

  • Go5 300
  • Java3 171
  • Kotlin1 128
  • Node.js1 016
  • Rust862
  • .NET676
  • PHP321
  • C++273
  • C#208

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

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 705
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD920
  • SRE308
  • Кибербезопасность38

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

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США25 642
  • Вакансии в Европе10 259
  • Работа в России3 639
  • Вакансии в Канаде2 255

По формату

  • Удалённые вакансии42 339
  • Релокация в США25 642
  • Гибридная работа5 706
  • Офисная работа4 402

По уровню

  • Senior вакансии22 510
  • Middle вакансии11 429
  • Junior вакансии3 877

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Что такое Rails callbacks (before_action, after_create и т.д.) и каковы их риски?

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

Callbacks в Rails — хуки жизненного цикла объектов (before_save, after_create, after_commit и др.) и контроллеров (before_action). Основные риски: скрытая логика, проблемы с транзакциями при after_save вместо after_commit, замедление bulk-операций.

Controller callbacks (before_action)

before_action — это callback контроллера (не модели), который выполняется до указанного экшена. Используется для аутентификации, авторизации, загрузки ресурсов.

class ArticlesController < ApplicationController
  before_action :authenticate_user!
  before_action :set_article, only: [:show, :edit, :update, :destroy]
  before_action :authorize_author!, only: [:edit, :update, :destroy]

  def show
    # @article уже загружен
  end

  private

  def set_article
    @article = Article.find(params[:id])
  end

  def authorize_author!
    redirect_to root_path, alert: 'Forbidden' unless @article.author == current_user
  end
end

Rails callbacks: жизненный цикл объектов

Callbacks в Rails — это хуки, которые вызываются автоматически в определённые моменты жизненного цикла объекта ActiveRecord. Они позволяют вклиниться до или после операций создания, обновления, удаления, валидации и т.д.

Основные группы callbacks

  • Валидация: before_validation, after_validation
  • Сохранение: before_save, around_save, after_save
  • Создание: before_create, around_create, after_create
  • Обновление: before_update, around_update, after_update
  • Удаление: before_destroy, around_destroy, after_destroy
  • Инициализация/загрузка: after_initialize, after_find
  • Коммит транзакции: after_commit, after_rollback

Callback модели: пример с after_create

class User < ApplicationRecord
  after_create :send_welcome_email
  after_create :create_default_profile
  before_save  :normalize_email
  before_destroy :check_no_active_orders

  private

  def send_welcome_email
    UserMailer.welcome(self).deliver_later
  end

  def create_default_profile
    Profile.create!(user: self, bio: '')
  end

  def normalize_email
    self.email = email.downcase.strip
  end

  def check_no_active_orders
    if orders.active.exists?
      errors.add(:base, 'Cannot delete user with active orders')
      throw :abort
    end
  end
end

after_commit vs after_save

after_save срабатывает внутри транзакции — данные ещё не закоммичены в БД. after_commit срабатывает после успешного коммита, что важно для side-эффектов (email, очереди, вебхуки).

class Order < ApplicationRecord
  # Плохо: Sidekiq может прочитать запись до коммита
  after_save :enqueue_fulfillment

  # Хорошо: задача ставится в очередь только после коммита
  after_commit :enqueue_fulfillment, on: [:create, :update]

  private

  def enqueue_fulfillment
    FulfillmentJob.perform_later(id)
  end
end

Прерывание callback-цепочки

В Rails 5+ для прерывания цепочки в before_* callbacks нужно явно вызвать throw :abort. Возврат false уже не останавливает цепочку.

before_save :check_quota

def check_quota
  throw :abort if quota_exceeded?
end

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

  • after_save вместо after_commit для очередей: задача в Sidekiq/Resque может запуститься до коммита транзакции и не найти запись по ID.
  • Скрытая бизнес-логика: callbacks прячут поведение внутри модели, что затрудняет понимание потока выполнения и юнит-тестирование изолированных компонентов.
  • Цепочки callbacks замедляют bulk-операции: User.create! в цикле триггерит все callbacks; для массовой вставки используйте insert_all (callbacks не вызываются).
  • Обход callbacks через update_column: методы update_column, update_columns, update_all, delete, delete_all пропускают callbacks и валидации.
  • Рекурсивные вызовы: callback вызывает save внутри себя → бесконечная рекурсия. Используйте update_column или флаги-гарды.
  • before_destroy и throw :abort: если не вызвать throw :abort, запись всё равно удалится даже если вы добавили ошибку в errors.
  • after_initialize вызывается при каждом find: это тяжёлый callback — не выполняйте в нём дорогостоящие операции, он вызывается на каждый загруженный объект из БД.
  • Тестирование: skip_callback: в тестах часто обходят callbacks через User.skip_callback(:create, :after, :send_welcome_email), что скрывает реальное поведение и может привести к ложным зелёным тестам.

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

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

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

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

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

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

Источники

  • https://guides.rubyonrails.org/active_record_callbacks.html
  • https://guides.rubyonrails.org/
←Предыдущий вопросПредставьте, endpoint на Ruby on Rails иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?Следующий вопрос→Что такое Rails concerns и как они помогают организовывать код?

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

Ruby on RailsBackend-Engineeringruby-on-rails-ecosystem

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

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