Sinatra 및 ActiveRecord의 application_controller.rb와 테이블 연결 추가
재봉 패턴 데이터베이스 프로젝트를 진행하던 중 문제에 부딪혔습니다. 코딩 조직 문제와 비슷합니다. 내 모델을 다음과 같이 분리했습니다.
각 테이블에 대해 가져오기 호출이 있어야 하고 작동하지만 일부 테이블을 다른 테이블에 연결하는 방법을 잘 모르겠습니다. 예를 들어 "패턴 테이블을 호출하기만 할 때 내가 만든 패턴/패브릭 조인 테이블에서 패브릭에 어떻게 액세스합니까?"라고 자문했습니다.
이 블로그가 들어오는 곳입니다!
당시 내 컨트롤러는 다음과 유사했습니다.
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"
}
]
}
도움이 되었기를 바랍니다. 😉
Reference
이 문제에 관하여(Sinatra 및 ActiveRecord의 application_controller.rb와 테이블 연결 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/atomikjaye/adding-table-associations-with-sinatra-and-activerecords-applicationcontrollerrb-30gf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)