[RUBY-ON-RAILS] 때 "has_many을 :을 통해"사용하는 레일의 관계?
RUBY-ON-RAILS때 "has_many을 :을 통해"사용하는 레일의 관계?
때 (방법)을 사용하는 방법을 통해이며 : 나는 무엇을 has_many을 이해하려고 노력하고 있습니다. 그러나, 나는 그것을 받고 있지 않다. 나는 레일 3부터 읽기 그리고 난 인터넷 검색을 시도하지만, 나는 이해할 수 없습니다입니다.
해결법
-
==============================
1.사용자 및 그룹 : 두 개의 모델을 가지고 말.
사용자 및 그룹 : 두 개의 모델을 가지고 말.
당신이 그룹에 속한 사용자를하고 싶었 경우에, 당신이 뭔가를 할 수 있습니다 :
class Group < ActiveRecord::Base has_many :users end class User < ActiveRecord::Base belongs_to :group end
당신이 협회의 주위에 추가 메타 데이터를 추적하고 싶다면? 예를 들어, 사용자는 사용자의 역할은 그룹에 어떤 아마도 그룹에 합류, 또는?
이 협회 첫 번째 클래스 개체 수 있도록하는 곳이다 :
class GroupMembership < ActiveRecord::Base belongs_to :user belongs_to :group # has attributes for date_joined and role end
이 소개하는 새 테이블, 및을 제거해 사용자의 테이블에서 GROUP_ID 열입니다.
이 코드의 문제는 당신이 사용자 클래스를 사용하는 경우 다른 모든를 업데이트하고 변경해야 할 것이다 :
user.groups.first.name # becomes user.group_memberships.first.group.name
코드의이 유형은 짜증, 그리고이 고통과 같은 변화를 소개합니다.
has_many : 당신에게 두 세계의 최고 제공을 통해 :
class User < ActiveRecord::Base has_many :groups, :through => :group_memberships # Edit :needs to be plural same as the has_many relationship has_many :group_memberships end
이제 일반 has_many처럼 취급하지만, 당신이 그것을 필요로 할 때 협회 모델의 혜택을받을 수 있습니다.
당신은 또한 has_one하여이 작업을 수행 할 수 있습니다.
편집 : 그룹에 사용자를 쉽게 추가 할 수 그것을 만들기
def add_group(group, role = "member") self.group_associations.build(:group => group, :role => role) end
-
==============================
2.당신이이 모델을 가지고 말 :
당신이이 모델을 가지고 말 :
Car Engine Piston
자동차 has_one : 엔진 자동차 : belongs_to 엔진 엔진의 has_many : 피스톤 피스톤 belongs_to : 엔진
자동차의 has_many : 통해 피스톤 : 엔진 피스톤 has_one : 자동차를 통해 : 엔진
본질적으로 다른 모델로 모델 관계를 위임, 그래서 대신 호출 car.engine.pistons에 데, 당신은 car.pistons은 다만 수
-
==============================
3.has_many : 관통하고 다른 테이블 간의 관계를 나타내는 표이다 중간 테이블을 통해 가입 has_and_belongs_to_many 관계 기능. A는 쿼리를 가입 달리, 데이터는 실제로 테이블에 저장됩니다.
has_many : 관통하고 다른 테이블 간의 관계를 나타내는 표이다 중간 테이블을 통해 가입 has_and_belongs_to_many 관계 기능. A는 쿼리를 가입 달리, 데이터는 실제로 테이블에 저장됩니다.
has_and_belongs_to_many를 사용하면 기본 키를 필요로하지 않으며, 당신은 액티브 관계를 통해보다는 액티브 모델을 통해 레코드를 액세스 할 수 있습니다. 당신은 다 대다 관계를 두 가지 모델을 링크 할 때 일반적으로 HABTM를 사용합니다.
당신은 has_many을 사용 관계를 통해 당신이 차 키와 조인 된 데이터에 사용자 지정 열을 추가 할 수있는 기능을 완비 한 레일 모델로 테이블을 결합과 상호 작용 할 때. 후자는 접합 행 관련된 데이터에 특히 중요하지만, 종래의 모델에 속하는 정말로하지 않는다 - 예를 들면, 접합 행의 필드로부터 도출 된 계산 값을 저장하는 단계를 포함한다.
액티브 레코드 협회에 가이드에서 추천 읽습니다
from https://stackoverflow.com/questions/11600928/when-to-use-a-has-many-through-relation-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 중첩 된 해시를 액세스 할 때 어떻게 전무 요소에 대한 NoMethodError을 피하기 위해? [복제] (0) | 2020.02.21 |
---|---|
[RUBY-ON-RAILS] 가입 집합의 모든 값을 포함해야하지만, 더 포함 할 수 SQL (0) | 2020.02.21 |
[RUBY-ON-RAILS] 왜 들어오는 요청을 일으키는 내 CORS 구성은 필터 처리되지 않는 이유는 무엇입니까? 어떻게 그것이 단지 특정 기원의 요청을 수락 할 수 있습니까? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 동적 테이블 생성 (0) | 2020.02.20 |
[RUBY-ON-RAILS] CORS - JSONP없이 도메인 간 AJAX 기원 서버를 허용함으로써 (0) | 2020.02.20 |