즉, 프로그래밍[루비&레일스 복습편]을 배웁니다~ 컨트롤러의 오류를 해결해 보세요!

4901 단어 RubyRails
루비를 복습하면서 잘못된 문제에 도전한다.
조금씩이지만 지금까지 이해하지 못했던 부분들을 이제는 이해했다.
오늘은 실제 오류 화면을 보면서 코드를 설명한다.

수수께끼 같은 오류가 발생했다!


우선 실제 잘못된 화면은 이쪽입니다.↓

최상위 화면에서 세부 화면을 열려고 할 때 이런 오류가 발생했다.
갑자기 이 화면이 나오면 당황하겠지...
하지만 냉정하게 해석하면 어떤 착오가 있었는지 쉽게 발견할 수 있다.
화면과 코드를 보면서 오류의 수수께끼를 함께 풀어보자!

오류 해결 편


오류를 해결하기 위해 선택
① 오류가 발생한 파일 지정
② 서류 내 기술을 확인하고 잘못된 점을 발견
③ 올바른 기술로 수정
이 세 걸음이 필요하다.
먼저 오류가 발생한 파일을 확인합니다.
뭔가 탐정이 된 기분이야!
방금 틀린 화면을 다시 한 번 봅시다.
빨간 상자에는'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일을 기다리면서...계속해.

좋은 웹페이지 즐겨찾기