[Rails] 다대다의 연관성.

5135 단어 RubyRails

복습


먼저 1체다의 연관성을 복습한 다음에 어떤 상황에서 다대다의 연관성을 구축해야 하는지 살펴보자.
연관이 있으므로 두 모델을 준비합니다.하나는 Author, 다른 하나는 북이지?
작가와 서적을 각각 나타내는 반이다.책은 한 작가가 썼고, 한 작가가 여러 권의 책을 출판했다.

이 때 하나 이상의 연결을 만들려면 Book 클래스에 autohor-id라는 열을 정의하고 다음과 같은 종류를 기술했습니다.
class Author < ApplicationRecord
  has_many :books
end

class Book < ApplicationRecord
  belongs_to :author
end
이렇게 정의하면 다음과 같은 방법을 사용할 수 있다.
author = Author.find(id)
# ある著者が書いた書籍の配列
# author_idがauthorのidと同じ値であるbookを取得
author.books

book = Book.find(id)
# ある書籍の著者
# bookが持つauthor_idと同じ値をidに持つauthorを取得
book.author
그러나 실제로는 한 권의 책에 여러 명의 작가가 있다.
따라서 book.authorsauthor.books 두 방향에서 여러 개의 값을 얻는 것이 이상적이다.현재 상황은 북에 author가 하나 있다id만 있기 때문에 약간의 수정이 필요합니다.

다대다의 실현


따라서 다대다의 연관성이 필요하다.
다대다의 연관성은 Author, Book 외에 중간 클래스로 불리는 AuthorBook 클래스를 추가했다.
이 AuthorBook 클래스는 authhor입니다.id 및 책id, 저자, 서적 관련 1개 기록이 생성되었습니다.
그럼 우리 모델 하자.
rails g model author_book author:references book:references
rake db:migrate
'references'를 작성함으로써 각 반과 관련을 맺을 수 있다.
다음은 각 반을 수정한다.
class Author < ApplicationRecord
  has_many :author_books
  has_many :books, through: :author_books
end


class Book < ApplicationRecord
  has_many :author_books
  has_many :authors, through: :author_books
end

class AuthorBook < ApplicationRecord
  belongs_to :book
  belongs_to :author
end

이렇게 준비됐습니다.그러면 한번 실험을 해보도록 하겠습니다.
book = Book.create
author1 = Author.create
author2 = Author.create
book.authors
아직 중간류의 연관이 없기 때문에 책과 관련된 작가가 나타나지 않을 것이다.
AuthorBook.create(author_id: author1.id, book_id: Book.id)
AuthorBook.create(author_id: author2.id, book_id: Book.id)
book.authors
그럼 이제 어때요?
잘 설정하면 두 개의auther 실례가 나타날 거예요.
간단한 다대다의 관련 설명은 다음과 같다.
다대다의 연관성, 예를 들면 투고에 쓰이는 좋은 기능, 배우와 출연 작품의 연관성 등이다.
여러 모델이 생겨 복잡해졌지만 복잡한 데이터 구조를 익혀야 한다.

좋은 웹페이지 즐겨찾기