[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-should-one-use-a-has-many-through-relation-in-rails by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 해결하기 위해 Windows에서 "인증서 확인 실패"? (0) | 2020.02.07 |
---|---|
[RUBY-ON-RAILS] 어떻게 개발에 레일 3 서버의 기본 포트를 변경하려면? (0) | 2020.02.07 |
[RUBY-ON-RAILS] 에 WEBrick 반응이 매우 느립니다. 어떻게 속도를하려면? (0) | 2020.02.06 |
[RUBY-ON-RAILS] 레일 + MySQL의 OSX에 : 라이브러리로드되지 : libmysqlclient.18.dylib를 (0) | 2020.02.06 |
[RUBY-ON-RAILS] 누군가가 명확하고 간단한 용어 나에게 collection_select를 설명 할 수 있습니까? (0) | 2020.02.06 |