RB Ruby  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Active Record и связи моделей

Тест «Active Record и связи моделей» проверяет чтение кода, объяснение причин, поиск скрытых рисков, выбор исправления и работу с граничными сценариями. В нём 25 вопросов, 14 заданий с Ruby-кодом и 5 тематических шкал.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. Время — 70 минут. У каждого задания ровно один правильный вариант. Фрагменты рассчитаны на Ruby 4.0.6; задания Rails — на Rails 8.1.3. После завершения откроются общий процент, 5 тематических результатов и разбор всех ответов.
Вопрос 1 из 25
Что покажет выполнение этого фрагмента из раздела «Ассоциации»? Проверьте обе половины ответа: частично верный вариант остаётся неверным.
RubyRuby — Ассоциации
# Проследите выполнение и выберите точный результат.
class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end

class Book < ApplicationRecord
  belongs_to :author
end
# В миграции: add_foreign_key :books, :authors
Вопрос 2 из 25
Какой вывод учитывает и возвращаемое значение, и побочный эффект в теме «Валидации»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Валидации
# Проследите выполнение и выберите точный результат.
class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end
# В миграции также нужен:
# add_index :users, :email, unique: true
Вопрос 3 из 25
Что произойдёт после последней строки в примере по теме «Обратные вызовы (callbacks)»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Обратные вызовы (callbacks)
# Проследите выполнение и выберите точный результат.
class Order < ApplicationRecord
  after_commit :enqueue_receipt, on: :create

  private
  def enqueue_receipt
    ReceiptJob.perform_later(id)
  end
end
Вопрос 4 из 25
Не запуская пример, выберите точный итог для блока «N+1-запросы». Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — N+1-запросы
# Проследите выполнение и выберите точный результат.
books = Book.includes(:author).limit(100)
books.each do |book|
  puts "#{book.title}: #{book.author.name}"
end
Вопрос 5 из 25
Как следует прочитать результат показанного примера «Безопасность данных»? Правильным считается только полностью согласованное утверждение.
RubyRuby — Безопасность данных
# Проследите выполнение и выберите точный результат.
status = params[:status]
orders = Order.where('status = ?', status)
p orders.to_sql
Вопрос 6 из 25
Базовый пример выглядит корректно. Что всё же нарушает контракт в блоке «Ассоциации»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
RubyRuby — Ассоциации
# Обычный запуск проходит. Найдите скрытый риск.
class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end

class Book < ApplicationRecord
  belongs_to :author
end
# В миграции: add_foreign_key :books, :authors
Вопрос 7 из 25
Какое допущение делает этот код по теме «Валидации» ненадёжным? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
RubyRuby — Валидации
# Обычный запуск проходит. Найдите скрытый риск.
class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end
# В миграции также нужен:
# add_index :users, :email, unique: true
Вопрос 8 из 25
Какой отказ связан с причиной в коде, а не с внешним шумом, в теме «Обратные вызовы (callbacks)»? Нужен вариант без логического разрыва между первой и второй частью.
RubyRuby — Обратные вызовы (callbacks)
# Обычный запуск проходит. Найдите скрытый риск.
class Order < ApplicationRecord
  after_commit :enqueue_receipt, on: :create

  private
  def enqueue_receipt
    ReceiptJob.perform_later(id)
  end
end
Вопрос 9 из 25
Какое допущение делает этот код по теме «N+1-запросы» ненадёжным? Смотрите на всю причинную связку, а не только на знакомую формулировку.
RubyRuby — N+1-запросы
# Обычный запуск проходит. Найдите скрытый риск.
books = Book.includes(:author).limit(100)
books.each do |book|
  puts "#{book.title}: #{book.author.name}"
end
Вопрос 10 из 25
Где в показанном решении «Безопасность данных» скрыт дефект, который проявится не на каждом входе? Не выбирайте ответ по одному точному фрагменту: вся формулировка должна выдерживать проверку.
RubyRuby — Безопасность данных
# Обычный запуск проходит. Найдите скрытый риск.
status = params[:status]
orders = Order.where('status = ?', status)
p orders.to_sql
Вопрос 11 из 25
На какой контракт языка или библиотеки опирается результат блока «Ассоциации»? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 12 из 25
Какой принцип темы «Валидации» переносится на другие примеры того же типа? Выберите связку, в которой верны и основной вывод, и его обоснование.
Вопрос 13 из 25
Почему показанный фрагмент «Обратные вызовы (callbacks)» ведёт себя именно так? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 14 из 25
Какой принцип темы «N+1-запросы» переносится на другие примеры того же типа? В правильном ответе вторая часть действительно объясняет или проверяет первую.
Вопрос 15 из 25
Какое правило остаётся верным, даже если вход и порядок вызовов изменятся, в теме «Безопасность данных»? Смотрите на всю причинную связку, а не только на знакомую формулировку.
Вопрос 16 из 25
Какой вариант правки выдержит граничный сценарий темы «Ассоциации»? Верный вариант не содержит частично правильной подмены причины или следствия.
RubyRuby — Ассоциации
# Выберите изменение, которое исправляет причину.
class Author < ApplicationRecord
  has_many :books, dependent: :destroy
end

class Book < ApplicationRecord
  belongs_to :author
end
# В миграции: add_foreign_key :books, :authors
Вопрос 17 из 25
Какой рефакторинг делает контракт блока «Валидации» явным и проверяемым? Правильным считается только полностью согласованное утверждение.
RubyRuby — Валидации
# Выберите изменение, которое исправляет причину.
class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end
# В миграции также нужен:
# add_index :users, :email, unique: true
Вопрос 18 из 25
Какое действие добавляет недостающую гарантию в блоке «Обратные вызовы (callbacks)»? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — Обратные вызовы (callbacks)
# Выберите изменение, которое исправляет причину.
class Order < ApplicationRecord
  after_commit :enqueue_receipt, on: :create

  private
  def enqueue_receipt
    ReceiptJob.perform_later(id)
  end
end
Вопрос 19 из 25
Какой вариант решения «N+1-запросы» останется понятным при сопровождении? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
RubyRuby — N+1-запросы
# Выберите изменение, которое исправляет причину.
books = Book.includes(:author).limit(100)
books.each do |book|
  puts "#{book.title}: #{book.author.name}"
end
Вопрос 20 из 25
Какой рефакторинг переводит правило «Безопасность данных» из договорённости в проверяемый контракт? Верный вариант не содержит частично правильной подмены причины или следствия.
Вопрос 21 из 25
Какой регрессионный пример обнаружит ошибочное обобщение в теме «Ассоциации»? Оценивайте ответ целиком: обе части утверждения должны быть точными.
Вопрос 22 из 25
Какой случай покажет, что исправление «Валидации» не держится на удачном входе? Одного совпавшего вывода недостаточно — проверьте также вторую часть ответа.
Вопрос 23 из 25
Какую границу контракта «Обратные вызовы (callbacks)» нужно закрепить отдельным тестом? Сопоставьте не только итог, но и правило, риск или проверку, которые с ним связаны.
Вопрос 24 из 25
Какой сценарий должен падать на старой реализации и проходить после исправления «N+1-запросы»? Ищите не знакомые слова, а технически непротиворечивую пару утверждений.
Вопрос 25 из 25
Какой сценарий должен падать на старой реализации и проходить после исправления «Безопасность данных»? Оценивайте ответ целиком: обе части утверждения должны быть точными.

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу