'has_many'에 대한 ActiveRecord 연결 소개

코딩 부트캠프에서 ActiveRecord에 대해 배울 때 그들은 Ruby와 SQL에서 작업할 때 ActiveRecord가 제공하는 주요 이점에 대해 이야기했습니다. 그래서 저는 무대 뒤에서 무슨 일이 일어나고 있는지 더 자세히 알아보고 싶었고 ActiveRecord가 그곳에서 많은 일을 하고 있다는 것을 발견했습니다. 이제 우리 모두가 사용하는 has_many 에 대해 이야기해 보겠습니다.
Has_many는 ActiveRecord가 제공하는 6가지 유형의 연관(또는 "매크로 메소드") 중 하나입니다.has_many 연결은 has_one 와 유사하지만 다른 모델과의 일대다 연결을 나타냅니다. belongs_to 연결의 "다른 쪽"에서 이 연결을 종종 찾을 수 있습니다. 이 연결은 모델의 각 인스턴스에 다른 모델의 인스턴스가 0개 이상 있음을 나타냅니다. has_many 연결을 사용하면 모델has_many이 무엇이든 복수형인지 항상 확인하고 싶을 것입니다. 예를 들어, 어린이와 어린이의 장난감을 포함하는 애플리케이션에서 어린이 모델은 다음과 같이 선언될 수 있습니다.

class Child < ApplicationRecord
  has_many :toys
end

has_many :through 연관은 종종 다른 모델과 다대다 연결을 설정하는 데 사용됩니다. 이 연관은 선언 모델이 세 번째 모델을 통해 진행하여 다른 모델의 0개 이상의 인스턴스와 일치될 수 있음을 나타냅니다. 또한 has_many :through 연결을 사용하면 모델has_many이 복수형인지 확인해야 합니다. 예를 들어 게임에 리뷰가 있고 리뷰를 작성할 수 있는 사용자가 있다고 가정합니다. 관련된 다대다 연결 선언은 다음과 같을 수 있습니다.

class Game < ApplicationRecord
  has_many :reviews
  has_many :users, through: :reviews
end

class Review < ApplicationRecord
  belongs_to :game
  belongs_to :user
end

class User < ApplicationRecord
  has_many :reviews
  has_many :games, through: :reviews
end


자, 이제 has_many 테이블 연결의 기본 설정이 완료되었으므로 자동 생성되는 항목에 대해 알아보겠습니다. 아래 목록을 보십시오.

others                            
others=(other,other,...)          
other_ids                         
other_ids=(id,id,...)             
others<<                          
others.push                       
others.concat                     
others.build(attributes={})       
others.create(attributes={})      
others.create!(attributes={})     
others.size                       
others.length                     
others.count                      
others.sum(*args)                 
others.empty?                     
others.clear                      
others.delete(other,other,...)    
others.delete_all                 
others.destroy(other,other,...)   
others.destroy_all                
others.find(*args)                
others.exists?                    
others.distinct                   
others.reset                      
others.reload     


이러한 자동 생성 방법은 데이터베이스를 쿼리할 때 많은 시간을 절약할 수 있고 또 절약할 것입니다.

다음은 has_many가 할 수 있는 또 다른 멋진 일입니다. 연관이 Relation 개체에서 구축되기 때문에 다음과 같이 쿼리에 조건을 추가할 수 있습니다.

class Blog < ActiveRecord::Base
  has_many :published_posts, -> { where(published: true) }, class_name: 'Post'
end


'Association Methods'의 기능에 대해 자세히 알아볼 수도 있습니다Here.

또한 다른 5개 연결에 대해 자세히 알아보려면 해당 연결 유형 및 사용 사례에 대한 자세한 문서 링크가 있습니다ActiveRecord.

결론적으로 has_many는 많은 시간을 절약할 수 있는 매우 유용한 방법입니다. 저는 개인적으로 has_many이 이미 말한 방법을 제공했다는 것을 모르고 많은 방법을 만들었습니다. 따라서 무슨 일이 일어나고 있는지 또는 그 방법이 당신을 위해 무엇을 하는지 궁금해하는 것이 좋습니다. '매크로' 방법으로 시간을 절약한 시간에 대해 아래 댓글에 게시하세요.

좋은 웹페이지 즐겨찾기