Development Tip

Rails has_one : 연결을 통해

yourdevel 2020. 11. 18. 21:34
반응형

Rails has_one : 연결을 통해


Rails에는 has_one :through두 번째 모델을 통해 세 번째 모델과 일대일 연결을 설정하는 데 도움 이되는 연결이 있습니다. 바로 가기 연결을 만드는 것 외에 실제 사용은 무엇입니까? 그렇지 않으면 추가 단계가 될 것입니다.

Rails 가이드 에서이 예제를 사용합니다 .

class Supplier < ActiveRecord::Base
  has_one :account
  has_one :account_history, :through => :account
end

class Account < ActiveRecord::Base
  belongs_to :supplier
  has_one :account_history
end

class AccountHistory < ActiveRecord::Base
  belongs_to :account
end

다음과 같은 작업을 수행 할 수 있습니다.

supplier.account_history

그렇지 않으면 다음과 같이 도달합니다.

supplier.account.history

더 단순한 액세스만을위한 경우 기술적으로 더 쉬운 액세스를 위해 n-1 모델을 통과하는 n 번째 모델과 모델을 연결하는 일대일 연관이있을 수 있습니다. 바로 가기 외에 내가 놓친 다른 것이 있습니까?


  1. Logic , 좋습니다. 약간 약하게 들릴 수 있지만 "계정이있는 공급 업체가 있습니다.이 공급 업체의 전체 계정 내역을보고 싶습니다"라고 말하는 것이 합리적이므로 나에게 적합합니다. 공급 업체의 계정 내역에 직접 액세스 할 수 있습니다.

  2. 효율성 , 이것이 내가 사용하는 주된 이유입니다 :through. 단순히 공급자를 호출 한 다음 계정을 호출 한 다음 account_history를 호출하는 대신 조인 문을 발행하기 때문입니다. 데이터베이스 호출 수를 알고 계십니까?

    • 사용 :through, 1 호출하면 공급 업체를 얻기 위해, 1 호출이 account_history 얻기 위해 (자동 레일은 사용 :join계정을 통해 검색)

    • 일반 연결 사용, 공급 업체 가져 오기 1 번, 계정 가져 오기 1 번, account_history 가져 오기 1 번

그것이 내가 생각하는 것입니다 =) 도움이되기를 바랍니다!


아무도 Association Objects를 건드리지 않았다는 것에 놀랐습니다 .

has_many(또는 has_one) :through관계는의 사용을 용이하게 연결 객체 패턴 은 서로 관련된 두 가지가있을 때, 그리고 그 관계 자체가 (연관이되었다 즉 날짜 또는 만료시) 특성을가집니다.

이것은 ActiveRecord 도우미 의 좋은 대안으로 간주됩니다has_and_belongs_to_many . 그 이유는 협회의 성격을 변경하거나 추가해야 할 가능성이 매우 높기 때문이며, 프로젝트를 시작한 지 몇 달이되었을 때 관계가 처음에 다음과 같이 설정 되었다면 매우 고통 스러울 수 있습니다. a has_and_belongs_to_many(두 번째 링크는 좀 더 자세히 설명합니다). 처음에 has_many :through관계를 사용하여 설정 한 경우 프로젝트가 시작된 후 몇 달이 지나면 조인 모델의 이름을 바꾸거나 속성을 추가하기가 쉬워 개발자가 변화하는 요구 사항에보다 쉽게 ​​대응할 수 있습니다. 변화를위한 계획.


  • 역 연관 : 고전적인 상황 사용자 멤버십 그룹을 고려하십시오. 사용자가 여러 그룹의 구성원이 될 수있는 경우 그룹에는 많은 구성원 또는 사용자가 있고 사용자는 많은 그룹을 갖습니다. 사용자가 하나 개의 그룹의 구성원이 될 수 있다면,이 그룹은 여전히 많은 회원이 있습니다 class User has_one :group, :through => :membershipclass Group has_many :members, :through => memberships. 중간 모델 membership은 역 관계를 추적하는 데 유용합니다.

  • 확장 성 하십시오 has_one :through관계를 쉽게 확장하고 확장 할 수있는 has_many :through관계

참고 URL : https://stackoverflow.com/questions/2116017/rails-has-one-through-association

반응형