[Rails] Paranoia의 with 논리적 삭제deleted와joins를 동시에 사용하고 싶습니다. (또는includes)

결론

  • User 모델
  • has_many :event_users, -> { with_deleted }, dependent: :destroy
    
  • 설치할 컨트롤러
  • User.joins(:event_users).where(event_users: { event_id: @event.id })
    
    [#<User id: 1, email: "[email protected]", name: "ユーザー1", nomi_joy_id: "nomijoy1", created_at: "2020-08-24 08:39:25", updated_at: "2020-08-24 08:39:25", belongs: "オーシャンティック航空(株) 東自損3課", position: "副主任", image_id: "c50f454fa1b3c9e86e3033455f6fe88b5620bfd41a9cb92677...">,
     #<User id: 2, email: "[email protected]", name: "ユーザー2", nomi_joy_id: "nomijoy2", created_at: "2020-08-24 08:39:26", updated_at: "2020-08-24 08:39:26", belongs: "オーシャンティック航空(株) 東自損3課", position: "", image_id: "fdf0cc7df1524ced9088ebbdf2012fba4fd35ed9455bf2987b..."]
    

    자세하다


    전제 조건

  • 이번에 이렇게 많은 테이블이 있었다고 가정하면

  • 이번의 경우 논리 삭제 대상의 표는 술자리 사용자(이벤트 사용자), 飲み会1 출석飲み会ユーザー1, 飲み会ユーザー2 결석(논리 삭제)이다.
  • 물론 논리적으로 삭제된gem paranoia에서 아무것도 하지 않는 기본 상태에서 논리적 삭제 데이터는 얻을 수 없음
  • EventUser.where(event_id: @event.id)
    [#<EventUser:0x00007fa7bd62b7d8
      id: 1,
      user_id: 1,
      event_id: 1,
      fee: 4000,
      fee_status: false,
      deleted_at: nil,
      created_at: Mon, 24 Aug 2020 17:39:40 JST +09:00,
      updated_at: Mon, 24 Aug 2020 17:39:40 JST +09:00>]
    
  • with_deleted를 사용할 때도 논리적으로 삭제된 데이터를 검색할 수 있음
  • EventUser.with_deleted.where(event_id: @event.id)
    [#<EventUser:0x00007fa7bd62b7d8
      id: 1,
      user_id: 1,
      event_id: 1,
      fee: 4000,
      fee_status: false,
      deleted_at: nil,
      created_at: Mon, 24 Aug 2020 17:39:40 JST +09:00,
      updated_at: Mon, 24 Aug 2020 17:39:40 JST +09:00>,
     #<EventUser:0x00007fa7bd62b698
      id: 2,
      user_id: 2,
      event_id: 1,
      fee: 3500,
      fee_status: false,
      deleted_at: nil,
      created_at: Mon, 24 Aug 2020 17:39:40 JST +09:00,
      updated_at: Mon, 24 Aug 2020 17:39:40 JST +09:00>]
    

    하고 싶은 일


    이번에는 "사용자 모델을 시작으로 결석주회 1과 관련된 주회 이용자를 포함시키려 한다"고 덧붙였다.

  • joins(또는 includeswhere의 조합with_deleted의 이미지는 어떻게 써야 하나
  • 어쨌든 생각나는 걸 해보려고 했는데 잘못됐어요.

    User.joins(:event_users).with_deleted.where(event_users: { event_id: @event.id })
    

    여러모로 조사한 결과, 이것으로 완성되었다

  • User 모델
  • has_many :event_users, -> { with_deleted }, dependent: :destroy
    
  • 설치할 컨트롤러
  • User.joins(:event_users).where(event_users: { event_id: @event.id })
    
    [#<User id: 1, email: "[email protected]", name: "ユーザー1", nomi_joy_id: "nomijoy1", created_at: "2020-08-24 08:39:25", updated_at: "2020-08-24 08:39:25", belongs: "オーシャンティック航空(株) 東自損3課", position: "副主任", image_id: "c50f454fa1b3c9e86e3033455f6fe88b5620bfd41a9cb92677...">,
     #<User id: 2, email: "[email protected]", name: "ユーザー2", nomi_joy_id: "nomijoy2", created_at: "2020-08-24 08:39:26", updated_at: "2020-08-24 08:39:26", belongs: "オーシャンティック航空(株) 東自損3課", position: "", image_id: "fdf0cc7df1524ced9088ebbdf2012fba4fd35ed9455bf2987b..."]
    

    겸사겸사 말씀드리겠습니다.


    이번과 반대(?)의 "다수가 논리적으로 객체를 삭제할 때"는 다음과 같습니다.
  • 모델
  • class Person < ActiveRecord::Base
      belongs_to :group, -> { with_deleted }
    end
    
  • 컨트롤러
  • Person.includes(:group).all
    
    (말하자면 GiitHub에서 상술한 내용을 발견하고 이번 방법을 알아차렸다!)

    인용하다

    좋은 웹페이지 즐겨찾기