Як працює has_many through зв'язок (many to many) у Ruby on Rails?

У Ruby on Rails, `has_many through` є одним з асоціаційних методів, який дозволяє встановлювати зв'язок між моделями через іншу модель, яку вони обидві мають у has_many зв'язку.
Приклад. Припустимо, у вас є три моделі: User, Role і Assignment. Модель User може мати багато ролей, а також модель Role може належати багатьом користувачам (юзерам). Модель Assignment використовується для зв'язку User і Role через зв'язок has_many through.
class User < ApplicationRecord
  has_many :assignments
  has_many :roles, through: :assignments
end

class Role < ApplicationRecord
  has_many :assignments
  has_many :users, through: :assignments
end

class Assignment < ApplicationRecord
  belongs_to :user
  belongs_to :role
end
У моделях User та Role ми використовуємо ключове слово has_many для встановлення асоціації з моделлю Assignment. Ключове слово through: :assignments вказує Rails використовувати модель Assignment як посередника для встановлення зв'язку між User та Role.
Тепер, коли ми маємо таку структуру, ми можемо отримувати доступ до ролей користувача через асоціацію has_many through
Наприклад:
user = User.find(1)
user.roles # Повертає всі ролі, пов'язані з користувачем (user)
Або навпаки, ми можемо отримати доступ до користувачів, які належать до певної ролі:
role = Role.find(1)
role.users # Повертає всіх користувачів, які мають цю роль (role)
has_many through дозволяє нам зручно працювати з many to many зв'язками в Ruby on Rails, спрощуючи доступ до пов'язаних даних через посередника.
Цейво!Відреагуй!
🧵

Цей допис поки що не має жодних доповнень від автора/ки.

24 трав. '23, 18:53

Що таке joins у Ruby on Rails та як це працює?

meme code
Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)
8 трав. '24, 07:57

Вмикаємо YJIT у Ruby 3.2.1 (Ruby on Rails)

meme code
22 трав. '23, 16:26

В чому різниця <%, <%=, <%# та -%> у ERB шаблонах (Ruby on Rails)?

meme code
18 квіт. '24, 06:06

Розбираємо помилку PG::ObjectInUse (Ruby on Rails)

meme code
Як працює 'rails console --sandbox'?
23 трав. '24, 19:39

Як працює 'rails console --sandbox'?

meme code
23 трав. '23, 07:41

Що таке attr_accessor, attr_reader та attr_writer у Ruby? Для чого вони потрібні?

meme code
23 трав. '23, 06:57

Що таке дебагінг (debugging)?

meme code
2 черв. '23, 06:42

Помилка додавання людей до Google Family. Не вдалося завантажити сторінку.

meme code
2 черв. '23, 12:53

Що робить super у Ruby?

meme code
17 трав. '23, 18:52

Що таке loop у Javascript? Як працють цикли for та while у Javascript?

meme code
4 черв. '23, 21:19

Як клонувати GitHub репозиторій?

meme code
16 трав. '23, 22:17

Як видалити проміжок між inline та inline-block елементами?

meme code
16 трав. '23, 20:02

Що таке Origin у Git?

meme code
23 черв. '23, 12:07

Що таке Ubuntu? Для чого використовують?

meme code
23 черв. '23, 12:35

Що таке ISO-образ? Де використовуються ISO-образи програмного забеспечення?

meme code