동일한 STI 모델을 통해 Rails 연관 has_many 및 has_many

카르 펠라

모델 메모가 있습니다. 메모는 매우 유용하며 응용 프로그램 전체에서 많은 용도로 사용됩니다.

우리는 또 다른 모델 사용자를 가지고 있으며 이들은 사용자 1과 사용자 2 사이의 STI 분할입니다.

세 번째 모델 인 Thing이 있습니다. 사용자 소유의 것입니다 ... 좀 더 복잡해 지므로 잠시 그대로 두겠습니다. (마찬가지로 메모 할 수있는 Things와 비슷한 다른 모델도 있습니다.) .

Note.rb
belongs_to :user #This signifies that the user wrote the note
belongs_to :notable, polymorphic: :true #This is what the note is referring to

User.rb
has_many :user_notes, class_name: "Note", foreign_key: "user_id" 
#signifies the note was written by the User

User1.rb < User
has_many :notes, as: :notable 
#Signifies the note was about the User1
has_many :things

User2.rb < User
has_many :notes, as: :notable 
#Signifies the note was about the User2


Thing.rb
belongs_to :user1
has_many :notes, as: :notable 
#The note is about the thing

이것들은 일반적으로 자기 참조적일 수는 있지만 그렇지는 않습니다 (나는 나 자신에 대한 메모를 씁니다).

종종 User1s는 User2가 볼 수 있도록 User2s 또는 User2s Things에 대한 메모를 작성합니다.

user_notes의 이름을 바꾸는 데 올바른 경로를 택했다고 생각합니다.

나와 관련이있을 수있는 모든 메모를 수집하는 방법에 어려움을 겪고 있습니다. 즉, 내가 user1라고 가정 해 보겠습니다. 나는 내가 쓴 노트, 다른 사람들이 나에 대해 쓴 노트, 그리고 내 물건에 대해 쓰여진 노트를보고 싶습니다.

그렇게하는 쉬운 방법이 있습니까? 나는 두 가지 점으로 어려움을 겪고 있습니다.

  1. 내 물건에 대한 메모를 어떻게 연결할 수 있습니까?

    has_many : thing_notes, through : : things, 출처 : : notes

작동하지만 올바른 접근 방법인지 궁금합니다.

또한 나는 그 반대 (일종 유용함)에 관심이 있습니다.이 경우에는 누가 메모를 작성했는지 무시하고 관련 user1이있는 경우이를 반환합니다. 그러나...

delegate :user1, to: :notable

user1이 이미 잠재적 인 notable_type 인 경우 의미가 없습니다.

  1. 모든 메모 (유형에 관계없이)를 분류하고 반환하려면 어떻게해야합니까?

@user1.notes 

나에 대한 메모 만 반환합니다.

@user1.user_notes 

내가 쓴 메모를 반환합니다

@user1.thing_notes 

내 물건에 대한 메모를 반환합니다

나는 그것들을 함께 병합 할 수 있지만 성가신 중복이 발생할 위험이 있으며 여러 데이터베이스 호출을 수행하고 모두 한 유형일 때 db 순서를 잃는 것은 부끄러운 것 같습니다.

내 모든 메모를 얻을 수있는 확실한 방법이 있나요 ...?

Note.where("(user_id = :user1_id) OR (notable_id = :user1_id AND notable_type = 'User') OR (notable_type = 'Thing' AND notable_id IN (:things))", user1_id: user1.id, things:user1.thing_ids)

추악한 쪽을 만지고 더 추악해질 것입니다 ...

그런 퍼즐을 푸는 것을 좋아하는 사람에게 이해가되는 희망 ...

Ho Man

데이터 정렬의 경우 Rails 5를 사용하는 경우 다음과 같이 원시 SQL을 단순화 할 수 있습니다.

Note.where(user: user1).or(Note.where(notable: user1)).or(Note.where(notable: user1.things))

Rails 5를 사용하지 않는 경우 동일한 기능을 위해이 gem을 포함 할 수 있습니다 : https://github.com/Eric-Guo/where-or

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

동일한 모델에 대한 Rails 다형성 연관 및 has_many

분류에서Dev

여러 모델에서 작동하지 않음을 통해 Rails 연관 has_many

분류에서Dev

Rails 4에서 연관을 통해 has_many 사용

분류에서Dev

Rails는 연관을 통해 has_many를 삭제합니다.

분류에서Dev

상속 문제와의 연관을 통해 Rails has_many

분류에서Dev

동일한 모델의 Rails belongs_to 및 has_many

분류에서Dev

Rails 4에서 연결을 통해 조인 테이블 및 has_many 문제

분류에서Dev

where 절을 통해 has_many 및 has_many

분류에서Dev

rails has_many : 연결을 통해 작동하지 않습니다.

분류에서Dev

has_many 연관을 통한 레일 범위

분류에서Dev

Rails Has_many 및 Owner_to의 모델 연결

분류에서Dev

Rails 모델 관계 has_many belongs_to

분류에서Dev

has_many : 관계 조작을 통해

분류에서Dev

Rails를 사용하여 모델을 통해 has_many 얻기

분류에서Dev

has_many : 연결을 통해

분류에서Dev

has_many : 연결을 통해-수정?

분류에서Dev

rails 4 관계 has_many 및 belongs_to

분류에서Dev

has_many 연관을 통해 하위 모델의 속성 계산

분류에서Dev

Rails : belongs_to 및 has_many 관계가있는 2 개의 모델에서 고유 한 값 선택

분류에서Dev

모델에 표시 할 rails-admin has_many 연관

분류에서Dev

Mongoid : has_many를 통해 동일한 모델을 두 번 이상 참조

분류에서Dev

has_many, through, class_name 및 where 절이있는 Rails 모델 연결

분류에서Dev

관계를 통해 has_many의 조인 엔티티에 대한 Rails 필드

분류에서Dev

이중 has_many 쿼리 : 연관을 통해

분류에서Dev

동일한 모델의 ActiveRecord has_many 및 belongs_to

분류에서Dev

Rails 3 : 컨트롤러 액션을 통한 has_many

분류에서Dev

Rails => Has_many 및 belongs_to ...

분류에서Dev

연관을 통한 has_many는 다형성이 될 수 있습니까?

분류에서Dev

FactoryGirl을 사용한 has_many 관계

Related 관련 기사

  1. 1

    동일한 모델에 대한 Rails 다형성 연관 및 has_many

  2. 2

    여러 모델에서 작동하지 않음을 통해 Rails 연관 has_many

  3. 3

    Rails 4에서 연관을 통해 has_many 사용

  4. 4

    Rails는 연관을 통해 has_many를 삭제합니다.

  5. 5

    상속 문제와의 연관을 통해 Rails has_many

  6. 6

    동일한 모델의 Rails belongs_to 및 has_many

  7. 7

    Rails 4에서 연결을 통해 조인 테이블 및 has_many 문제

  8. 8

    where 절을 통해 has_many 및 has_many

  9. 9

    rails has_many : 연결을 통해 작동하지 않습니다.

  10. 10

    has_many 연관을 통한 레일 범위

  11. 11

    Rails Has_many 및 Owner_to의 모델 연결

  12. 12

    Rails 모델 관계 has_many belongs_to

  13. 13

    has_many : 관계 조작을 통해

  14. 14

    Rails를 사용하여 모델을 통해 has_many 얻기

  15. 15

    has_many : 연결을 통해

  16. 16

    has_many : 연결을 통해-수정?

  17. 17

    rails 4 관계 has_many 및 belongs_to

  18. 18

    has_many 연관을 통해 하위 모델의 속성 계산

  19. 19

    Rails : belongs_to 및 has_many 관계가있는 2 개의 모델에서 고유 한 값 선택

  20. 20

    모델에 표시 할 rails-admin has_many 연관

  21. 21

    Mongoid : has_many를 통해 동일한 모델을 두 번 이상 참조

  22. 22

    has_many, through, class_name 및 where 절이있는 Rails 모델 연결

  23. 23

    관계를 통해 has_many의 조인 엔티티에 대한 Rails 필드

  24. 24

    이중 has_many 쿼리 : 연관을 통해

  25. 25

    동일한 모델의 ActiveRecord has_many 및 belongs_to

  26. 26

    Rails 3 : 컨트롤러 액션을 통한 has_many

  27. 27

    Rails => Has_many 및 belongs_to ...

  28. 28

    연관을 통한 has_many는 다형성이 될 수 있습니까?

  29. 29

    FactoryGirl을 사용한 has_many 관계

뜨겁다태그

보관