Коли готуєшся до інтерв'ю на посаду Ruby on Rails розробника, ти, ймовірно, зіткнешся з питаннями, які перевіряють як твої фундаментальні знання, так і практичний досвід. Нижче ми зібрали детальні відповіді на кілька ключових питань від 10 до 20, щоб допомогти тобі успішно пройти інтерв'ю.
10. Що таке self-join асоціація в Rails?
Self-join асоціація — це коли модель асоціюється сама з собою. Це корисно для таких сценаріїв, як ієрархічні дані, наприклад, відносини працівник-менеджер. Наприклад:
class Employee < ApplicationRecord
has_many :subordinates, class_name: 'Employee', foreign_key: 'manager_id'
belongs_to :manager, class_name: 'Employee', optional: true
end
Тут:
- Кожен працівник може мати менеджера (іншого працівника).
- Кожен працівник також може мати підлеглих (інших працівників).
11. Що таке ORM? Поясни.
Object-Relational Mapping (ORM) — це техніка, яка дозволяє розробникам працювати з базою даних, використовуючи об'єкти замість сирих SQL запитів. У Rails, ActiveRecord виступає як шар ORM. Він відображає таблиці бази даних на класи Ruby і рядки на об'єкти. Наприклад:
user = User.find(1) # Отримує рядок з таблиці users як об'єкт User
user.name = 'John'
user.save # Оновлює запис у базі даних
ORM абстрагує взаємодію з базою даних, що робить розробку швидшою та зручнішою.
12. Чи можна змінити стандартну конвенцію іменування таблиць у Rails? Якщо так, то як це зробити?
Так, ти можеш змінити стандартну конвенцію іменування таблиць, вказавши ім'я таблиці прямо у своїй моделі за допомогою методу self.table_name
. Наприклад:
class User < ApplicationRecord
self.table_name = 'custom_users'
end
Тепер модель User
буде працювати з таблицею custom_users
, а не з таблицею users
за замовчуванням.
13. Що таке rollback міграції? Як можна відкотити конкретну міграцію?
Rollback міграції — це скасування змін, внесених міграцією. Ось кілька поширених команд:
- Відкотити останню міграцію:
rails db:rollback
- Відкотити конкретну міграцію, вказавши її версію:
rails db:migrate:down VERSION=20230118000123
Ці команди допомагають підтримувати цілісність схеми бази даних під час розробки.
14. Що таке реляційні та умовні колбеки в ActiveRecord? Поясни.
- Реляційні колбеки: Вони спрацьовують при зміні асоціацій, такі як
before_add
,after_add
,before_remove
іafter_remove
. Приклад:
class Post < ApplicationRecord
has_many :comments, before_add: :check_comment
private
def check_comment(comment)
raise 'Коментар недійсний' unless comment.valid?
end
end
- Умовні колбеки: Вони виконуються за певних умов, що вказані через параметри
if
абоunless
. Приклад:
before_save :normalize_name, if: -> { name.present? }
15. Що таке транзакційні колбеки? Поясни.
Транзакційні колбеки — це колбеки, які виконуються лише якщо оточуюча транзакція бази даних була успішною. Вони корисні для забезпечення того, щоб дії, пов'язані з оновленням бази даних, виконувалися тільки після того, як база даних буде оновлена.
- Після того, як транзакція буде зафіксована:
after_commit :notify_user
- Після того, як транзакція буде скасована:
after_rollback :handle_error
16. Що таке маршрути member та collection? Поясни.
- Member маршрути: Вони оперують з одним ресурсом. Приклад:
resources :users do
member do
get :profile
end
end
Це створить маршрут /users/:id/profile.
- Collection маршрути: Вони оперують з усією колекцією ресурсів. Приклад:
resources :users do
collection do
get :active
end
end
Це створить маршрут /users/active.
17. Що ти знаєш про простір імен (namespace) та маршрути з обмеженнями (scoped routing)? У чому різниця між ними?
- Namespace: Групує контролери під певним модулем і змінює їхній шлях маршруту.
Приклад:
namespace :admin do
resources :users
end
- Це створює маршрути типу
/admin/users
і вимагає наявностіAdmin::UsersController
. - Scope: Обмежує шляхи маршрутизації без застосування структури модуля. Приклад:
scope '/admin' do
resources :users
end
- Це створює маршрут
/admin/users
, але використовуєUsersController
.
18. Поясни різницю між Webpacker і Sprockets.
- Webpacker: Керує сучасним JavaScript, CSS та іншими активами за допомогою Webpack.
- Sprockets: Традиційний пайплайн активів у Rails для обробки зображень, стилів та JavaScript.
З виходом Rails 7, Webpacker більше не підтримується і рекомендується використовувати інші інструменти, такі як Import Maps або ESBuild.
19. Скільки типів асоціацій існує в Rails?
У Rails є шість типів асоціацій:
belongs_to
has_one
has_many
has_many :through
has_one :through
has_and_belongs_to_many
20. Що таке partials у Rails? Поясни їх використання та спосіб передавання локальних змінних до partial.
Partials — це багаторазово використовувані шаблони переглядів, які зазвичай використовуються для спільних компонентів інтерфейсу, таких як форми або списки. Їх імена починаються з підкреслення (наприклад, _form.html.erb
), і вони рендеряться за допомогою:
<%= render 'form' %>
Щоб передати змінні:
<%= render 'form', user: @user %>
У partial ти можеш отримати доступ до змінної таким чином:
<%= user.name %>
Ці відповіді допоможуть тобі продемонструвати твої знання та практичний досвід з Rails під час інтерв'ю. Опануй ці концепції, щоб впевнено обговорювати та вирішувати реальні проблеми.
Перекладено з: Mastering Rails Interview Questions: 10 to 20