중첩 객체용 Ruby on Rails를 사용한 사용자 지정 직렬 변환기
3534 단어 railsbeginnersreactprogramming
그 개념은 내 머릿속에서 이해되었고 이 작업을 수행하는 데 어떤 모델이 필요한지 알고 있었습니다. 모델을 생성하고, 매크로 연결을 할당하고, Rails 콘솔에서 해당 연결을 테스트하는 프로세스는 매끄럽고 제가 정착한 아이디어에 매우 만족했습니다. 그러나 React에서 내 데이터를 처리하기 위해 프런트 엔드에서 백엔드 모델 컨트롤러로 API 요청을 실제로 시작하기 전까지는 내가 필요한 특정 키:값 쌍 객체를 얻지 못한다는 것을 깨달았습니다. 이 작업을 수행하도록 주문하십시오. 내 세 가지 기본 모델 간의 조인 테이블은 개체 자체의 값이 아니라 개체의 ID만 제공했습니다. 나는 이것이 일종의 직렬화가 필요하다는 것을 알고 있었지만 어떻게 해야할지 몰랐습니다.
기본적으로 내 모델은 Bands, Venues 및 Dates로 구성되었으며 모두 Concerts 조인 테이블을 통해 서로 연결되었습니다. 밴드는 콘서트를 통해 많은 장소를 가지고 있고, 장소는 콘서트를 통해 많은 데이트를 하고 있습니다. 내 의도는 날짜, 연주 밴드, 해당 콘서트를 주최하는 장소와 같은 정보가 포함된 콘서트 목록을 표시하는 콘서트 추적 앱을 만드는 것이었습니다. 나에게 문제는 내 프로젝트의 특정 세부 사항을 렌더링하는 데 필요한 이 모든 관련 정보를 포함하는 Concert 객체가 React에서 데이터를 처리할 때 이러한 각 객체에 대한 ID만 보유한다는 것입니다.
이 Concert 개체에 대한 액세스 권한을 받기 위해 백엔드 서버로 가져오는 것은 다음과 같은 형식으로 약속을 반환했습니다.
{date_id: 4, venue_id: 12, band_id:7}
Javascript 객체 점 표기법을 통해 더 쉽게 액세스할 수 있도록 완벽한 세상에서 조인 테이블을 만들기 위해 위에서 본 객체를 나타내기 위해 백엔드에 내 데이터를 시드하는 것이 이치에 맞았지만 내 객체가 더 많이 보이길 원했습니다. 이와 같이:
{date: "10/23/2022, venue: "CrossRoadsKC", band: "BROCKHAMPTON}
Bands, Venues 및 Dates 모델에 대한 직렬화를 가지고 놀고 난 후 내 솔루션은 다음과 같이 보였습니다.
def all_concerts
self.object.concerts.map do |each_concert|
{"concert_date": each_concert.concert_date, "concert_venue": each_concert.venue, "concert_band": each_concert.band }
end
end
기본적으로 여기에서 내가 한 것은 키의 이름을 직접 지정하고 해당 키에 필요한 관련 값을 할당할 수 있는 사용자 지정 개체를 만드는 것뿐이었습니다. 이는 현재 코드를 실행하는 특정 개체인 self의 인스턴스를 가져와서 수행합니다. 우리의 경우에는 Band, Venue 또는 Date 중 하나이며 중첩된 콘서트를 매핑하여 특정 작업을 수행합니다. 이 경우 해당 작업은 특정 Band, Venue 또는 Date에 대한 각 콘서트를 가져오고 콘서트 조인 테이블이 속해 있는 연결을 통해 액세스할 수 있는 키와 값을 할당합니다.
"band_concerts"개체는 내가 백엔드에 API 요청을 할 때마다 내 밴드에 내포된 개체로 표시되어 프런트 엔드에서 데이터를 처리할 때 필요한 정확한 개체를 쉽게 액세스하고 관련 정보와 함께 제공합니다. 내가 작업했던 각 모델.
Reference
이 문제에 관하여(중첩 객체용 Ruby on Rails를 사용한 사용자 지정 직렬 변환기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/keeganmcroberts/custom-serializers-with-ruby-on-rails-for-nested-objects-31cn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)