즉, 프로그래밍[루비&레일스 복습편]을 배웁니다~ 컨트롤러의 오류를 해결해 보세요!
조금씩이지만 지금까지 이해하지 못했던 부분들을 이제는 이해했다.
오늘은 실제 오류 화면을 보면서 코드를 설명한다.
수수께끼 같은 오류가 발생했다!
우선 실제 잘못된 화면은 이쪽입니다.↓
최상위 화면에서 세부 화면을 열려고 할 때 이런 오류가 발생했다.
갑자기 이 화면이 나오면 당황하겠지...
하지만 냉정하게 해석하면 어떤 착오가 있었는지 쉽게 발견할 수 있다.
화면과 코드를 보면서 오류의 수수께끼를 함께 풀어보자!
오류 해결 편
오류를 해결하기 위해 선택
① 오류가 발생한 파일 지정
② 서류 내 기술을 확인하고 잘못된 점을 발견
③ 올바른 기술로 수정
이 세 걸음이 필요하다.
먼저 오류가 발생한 파일을 확인합니다.
뭔가 탐정이 된 기분이야!
방금 틀린 화면을 다시 한 번 봅시다.
빨간 상자에는'NoMethod Error in Tweets Controller#Show'라고 적혀 있다.
이것을 해석하면'Tweets Controller의 show 동작에서 방법이 정의되지 않은 오류가 발생했다'는 뜻이다.
이 Tweets Controller는 매우 의심스럽다.
일단 이 시간에.controller.rb 파일이 좀 수상한데...탐정도 눈치챘다.
이어 ② 서류 내 기술을 확인하고 잘못된 부분을 찾아낸다.
방금 오류 화면에서'Tweets Controller의 show 동작에 오류가 발생한 것 같다'는 것이 확인되었습니다.
그래서 트위터.controller.rb 파일을 열고 show 동작에 대한 기술 부분을 조사했습니다.
def show
@comments = @tweet.comments.includes(:user)
end
네....응?
서술이 적은 것은 없습니까?
알아차린 그곳의 너는 이미 수수께끼를 풀었고(잘못)도 마찬가지였다.
이 쇼 동작은 '트위터의 자세한 페이지와comments' 운동을 표시합니다.
그러나 이런 기술이라면 관건적인 트위터가 완전히 빠졌다.
그러니까 정답은...
def show
@tweet = Tweet.find(params[:id])
@comments = @tweet.comments.includes(:user)
end
@ tweet = Tweet.find(param[:id])라는 말이 실종으로 인한 오류라는 것을 알았습니다. 이 오류가 하나 해결되었습니다.그나저나 누락된 코드 내용은 어떤 기술입니까
Tweet 모형은 Tweets표에 있는 @Tweet이라는 실례 변수를 PARam[:id]이라는 흩어진 상자에 넣고 컨트롤러에 넘겼다.
파라메스에 관해서는참고해주세요.
컨트롤러 및 모델, 연관성
여기서 컨트롤러와 모형을 복습합시다.
def show
@tweet = Tweet.find(params[:id])
@comments = @tweet.comments.includes(:user)
end
아까 코드를 봤을 때."@comments의:user는 모델을 지정하지 않아도 됩니까?"
이런 의문이 있을 수 있다.
왜 모델을 지목하지 않는 게 좋을까? 트윗 모델과 유저 모델이 연관이 있기 때문이다.
아래 그림을 보십시오.
여기.
여기서 컨트롤러는 Tweet 모델과 User 모델에 각각 DB의 내용을 전달하도록 지시한다.
두 모델을 각각 이동시킨 뒤 DB의 내용을 넘겨달라고 한 뒤 Tweet 모델에 지시를 내리고 데이터를 User 모델에 넘겨주고...를 참고하십시오.
모형이 많으면 각 모형을 불러내야 하기 때문에 처리가 무거워진다.
그곳에서 연관을 맺고 모델과 모델을 미리 결합시킨다.
이렇게 하면 어떤 모델이 호출될 때 다른 모델이 속한 데이터를 내보낼 수 있다.
하면, 만약, 만약...
@tweet = Tweet.find(params[:id])
@comments = @tweet.comments.includes(:user)
Tweet 모델이 호출되면 @comments의 사용자도 호출될 수 있습니다.한 트위터에 여러 개의 댓글이 달렸다.
그리고 댓글에 사용자가 한 명 있을 거예요.
이것은 일대다의 관계라고 불린다.
이런 관계를 미리 정의하기만 하면 하나의 정보에서 정보를 얻을 수 있다.
--
코드를 한꺼번에 기술할 정도는 아니지만 코드의 내용이 뭔지 알 것 같다.
이것은 나에게 있어서 매우 큰 진보이다...!
이런 상태로 공부하면서 프로그램 디자인이 각성한 X일을 기다리면서...계속해.
Reference
이 문제에 관하여(즉, 프로그래밍[루비&레일스 복습편]을 배웁니다~ 컨트롤러의 오류를 해결해 보세요!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moso/items/7d39bbc2c26b17217333텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)