У Ruby on Rails асоціації Active Record є ключовим елементом для визначення взаємозв'язків між моделями. Дві з найбільш часто використовуваних асоціацій — це belongs_to
і has_many
. Ці асоціації допомагають налаштовувати зв'язки один до одного та один до багатьох між таблицями бази даних. Давайте розглянемо, як вони працюють і коли їх слід використовувати.
Асоціація belongs_to
Асоціація belongs_to
використовується для встановлення зв'язку один до одного з іншою моделлю. Це означає, що модель, яка містить декларацію belongs_to
, має зовнішній ключ.
Приклад: Припустимо, що у нас є дві моделі: Post
і Author
. Кожен пост належить одному автору.
class Post < ApplicationRecord
belongs_to :author
end
class Author < ApplicationRecord
has_many :posts
end
У цьому прикладі таблиця posts
матиме стовпець author_id
, який служить зовнішнім ключем, зв'язуючи кожен пост з автором.
Асоціація has_many
Асоціація has_many
використовується для встановлення зв'язку один до багатьох з іншою моделлю. Це означає, що модель, яка містить декларацію has_many
, може мати нуль або більше асоційованих записів в іншій моделі.
Приклад: Продовжуючи приклад з моделями Post
і Author
, один автор може написати багато постів.
class Author < ApplicationRecord
has_many :posts
end
class Post < ApplicationRecord
belongs_to :author
end
Тут модель Author
оголошує асоціацію has_many :posts
, що означає, що кожен автор може мати кілька постів.
Схема бази даних
Щоб ці асоціації працювали, схема бази даних повинна відображати ці взаємозв'язки. Таблиця posts
повинна мати стовпець author_id
:
create_table :authors do |t|
t.string :name
t.timestamps
end
create_table :posts do |t|
t.string :title
t.text :body
t.references :author, foreign_key: true
t.timestamps
end
Використання
З цими асоціаціями ви можете легко переміщатися між моделями. Наприклад:
Щоб знайти всі пости певного автора:
author = Author.find(1)
posts = author.posts
Щоб знайти автора конкретного поста:
post = Post.find(1)
author = post.author
Висновок
belongs_to
та has_many
є основними для моделювання взаємозв'язків у Rails додатках. Вони спрощують процес зв'язування моделей та керування пов'язаними даними. Розуміючи та використовуючи ці асоціації, ви можете створювати потужні та ефективні додатки з добре структурованими базами даних.
Перекладено з: Understanding belongsto and hasmany in Rails