Sinatra 및 ActiveRecord의 application_controller.rb와 테이블 연결 추가

10662 단어 rubybeginnerswebdev
안녕하세요! 오늘의 블로그 게시물은 API 끝점에 테이블 연결을 추가하는 방법에 관한 것입니다!

재봉 패턴 데이터베이스 프로젝트를 진행하던 중 문제에 부딪혔습니다. 코딩 조직 문제와 비슷합니다. 내 모델을 다음과 같이 분리했습니다.
  • 회사(패턴 메이커),
  • 패턴(개별 패턴 및 정보),
  • 카테고리(각 패턴이 속할 수 있는 다양한 카테고리),
  • 패브릭(각 패턴에 나열된 패브릭 유형).

  • 각 테이블에 대해 가져오기 호출이 있어야 하고 작동하지만 일부 테이블을 다른 테이블에 연결하는 방법을 잘 모르겠습니다. 예를 들어 "패턴 테이블을 호출하기만 할 때 내가 만든 패턴/패브릭 조인 테이블에서 패브릭에 어떻게 액세스합니까?"라고 자문했습니다.

    이 블로그가 들어오는 곳입니다!

    당시 내 컨트롤러는 다음과 유사했습니다.

    get "/patterns" do
        patterns = Pattern.all
        patterns.to_json
      end
    
      get "/categories" do
        categories = Category.all
        categories.to_json
      end
    
      get "/fabrics" do
        fabrics = Fabric.all
        fabrics.to_json
      end
    
     get "/patterns/:id" do
        pattern = Pattern.find(params[:id])
        pattern.to_json
      end
    


    이러한 경로는 범주 및 직물을 표시하기 위해 호출하기 때문에 여전히 유효합니다. 문제가 발생한 유일한 경로는 /patterns/:id였습니다. 내 프로젝트가 구성되는 방식, 패턴belongs_to 한 회사 및 has_many 범주 및 패브릭through 각각의 조인 테이블 .. 이 경우에는 :pattern_categories:pattern_fabrics . 그러나 아래에서 보는 바와 같이. 패턴의 첫 번째 정보 수준에만 액세스하고 내 패턴 연결에는 액세스하지 않습니다. 이로 인해 단일 패턴에 대한 JSON을 얻으려고 할 때 문제가 발생했습니다.

    내 JSON은 다음과 같습니다(/patterns/:id 경로에 액세스할 때)

    {
    id: 13,
    company_id: 1,
    pattern_code: "M8314",
    notions: "7in zipper",
    size: "XL",
    yardage: 4,
    extras: "Caftan-style romper and jumpsuits with sash have front opening with hook and eyes. Views B and C have opening for sash to pull through. View C has arm opening at shoulder line for a cowl drapey look and has elasticized hems.",
    created_at: "2022-08-13T01:55:32.415Z",
    updated_at: "2022-08-13T01:55:32.415Z",
    image: "https://via.placeholder.com/150x200?text=Sewing+Pattern"
    }
    


    보시다시피 저는 제 협회가 그리워요. 저는 계속해서 "페치 호출을 더 많이 해야 하나요? 패턴 ID를 카테고리/패브릭 조인 테이블과 조인하고 어떻게든 패브릭 테이블을 검색하기 위해 for 루프를 사용해야 할까요?"라고 계속 생각했습니다.

    몇 시간 후

    나는 마침내 급우들에게 도움을 요청했습니다. 처음에 내 친구는 내가 왜 그렇게 많은 가져오기 호출을 하느냐고 물었습니다. 나는 질문을 했어 .. Willis에 대해 무슨 이야기를하고 있습니까? ... 작동합니다.
    그러나 그는 자신의 과정을 설명하기 시작했고 include라는 놀라운 일에 대해 가르쳐주었습니다. 내 인생을 1000배 더 쉽게 만들어주는 이 7글자 단어를 어떻게 놓쳤을까요?

    그래서 나는 검색을 시작했습니다. 연결을 포함하려면 다음과 같이 API 끝점을 재구성해야 했습니다.

      get "/patterns/:id" do
        pattern = Pattern.find(params[:id])
        pattern.to_json(include: [:categories, :fabrics])
      end
    


    내 pattern.rb 모델에 나열된 내 테이블을 '포함'해야 했습니다. Annnd ✨마법 ✨처럼, 이제 추가 코드 없이 개별 패턴에 필요한 모든 것이 가져오기에 포함되었습니다! 이것이 내 JSON의 현재 모습입니다.

    {
    id: 13,
    company_id: 1,
    pattern_code: "M8314",
    notions: "7in zipper",
    size: "XL",
    yardage: 4,
    extras: "Caftan-style romper and jumpsuits with sash have front opening with hook and eyes. Views B and C have opening for sash to pull through. View C has arm opening at shoulder line for a cowl drapey look and has elasticized hems.",
    created_at: "2022-08-13T01:55:32.415Z",
    updated_at: "2022-08-13T01:55:32.415Z",
    image: "https://via.placeholder.com/150x200?text=Sewing+Pattern",
    categories: [
    {
    id: 3,
    name: "Skirts, Pants, & Jumpsuits",
    created_at: "2022-08-12T03:49:55.817Z",
    updated_at: "2022-08-12T03:49:55.817Z"
    },
    {
    id: 2,
    name: "Tops & Vests",
    created_at: "2022-08-12T03:49:55.798Z",
    updated_at: "2022-08-12T03:49:55.798Z"
    }
    ],
    fabrics: [
    {
    id: 5,
    name: "Cotton Blends",
    created_at: "2022-08-12T03:49:56.093Z",
    updated_at: "2022-08-12T03:49:56.093Z"
    },
    {
    id: 4,
    name: "Cotton",
    created_at: "2022-08-12T03:49:56.077Z",
    updated_at: "2022-08-12T03:49:56.077Z"
    }
    ]
    }
    


    도움이 되었기를 바랍니다. 😉

    좋은 웹페이지 즐겨찾기