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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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 является сильным выбором, а где лучше выбрать более простой или другой стек?