Оволодіння питаннями на інтерв’ю з Rails: від 10 до 20

Коли готуєшся до інтерв'ю на посаду 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 є шість типів асоціацій:

  1. belongs_to
  2. has_one
  3. has_many
  4. has_many :through
  5. has_one :through
  6. 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

Leave a Reply

Your email address will not be published. Required fields are marked *