즉, 프로그래밍[Ruby&Rails 복습편]을 배웁니다~ 끊임없이 오류를 풀어보세요!

5196 단어 RubyRails

잘못을 극복하다


오류를 해결하는 과정에서 프로그램 설계의 기능도 점점 각성되었다.
예전에는 잘못을 해결하지 못해 괴성을 낼 뻔한 적이 있었는데, 이제는 차츰 사고 방법의 노하우를 터득하고 평온을 되찾아 물결치는 호흡을 배우고 있다.
프로그램 설계, 스탠드 이름은 OK 컴퓨터 같은 게 좋죠~

...말이 곧 주제에서 벗어났다.
이번에도 계속 잘못을 해결할 것이다.

오류 발생!명탐정도 출동!


일단 잘못된 화면부터 보자.

정신을 어지럽히지 말고 우선 냉정하게 영어를 읽어라.
첫 번째 줄을 읽으면 "NoMethodError in Tweets#index"가 표시됩니다.
이것은
"Twitters 컨트롤러의 index 동작을 읽을 때 방법이 없어요~"
이런 내용.
두 번째 줄을 보면'부분 템플릿 파일의 여섯 번째 줄에 기술된tweet__path 부분에 정의 방법이 없음'을 발견할 수 있다.

가설을 세우다


지금까지의 경험과 직감으로'NoMethod Error'가 나왔기 때문에 방법의 이름과 컨트롤러의 동작이 일치하지 않는 거죠?내 생각엔
따라서 일부 템플릿 파일의 기술을 다시 확인합니다.
그러나 세부 페이지를 표시하는 HTTP 방법은 get이어야 합니다.
우~우, 어려운 예감이야.

명탐정도 수사 단말기(조작)


보기 파일에 오류가 없을 수 있음을 감안하여 터미널에서 라크 루트 명령을 실행했습니다.
rake routes를 통해 라우팅 이름, 라우팅 경로, 컨트롤러 및 동작에 대응하는 HTTP 방법을 확인할 수 있습니다.
실제 라크 루츠 결과를 살펴봅시다.

표시된 내용을 간단히 설명해 주세요.
이것은 연두색 (자소색을 인상으로 설정한) 의 1열 표시이다
・Prefix...라우팅 이름
・Verb...HTTP 메서드
・URI Pattern...루트 경로 이름
・Controller#Action...디렉터 이름 # 동작 이름
을 입력합니다.
그림의 아래쪽을 파란색 상자로 반쯤 선택했습니다tweets  GET   /tweets(.:format)  tweets#index이 부분은 이번에 발생한 잘못된 처리이다.
내가 생각한 바와 같이 HTTP 방법은 과연 틀리지 않았다.
원인은 어디에 있는가...종착역의 운행 화면을 보고 나는 갑자기 깨달았다.
"어? 다른 Twitters 컨트롤러는 전혀 안 뜨나요?"
원래는 트위터 컨트롤러의 파일이 정의한 모든 동작을 배열해야 합니다.
하지만 실행 결과를 자세히 보면 트위터 컨트롤러의 index 동작만 표시됩니다.

오류 해결 편


이 결과에 근거하여 나는 원인이 경로에 있다고 단정한다.
컨트롤러 파일의 기술이 완전히 빠진 것도 아니지만 이 부분에는 30여 개의 기술이 있다.
이 부분이 완전히 없어진다면 눈치 채겠죠. 그래서 이번엔 경로를 먼저 검증하기로 했어요.
당장 라우팅 파일을 열고 기술을 확인해 봐.
error_routing.rb
Rails.application.routes.draw do
  devise_for :users
  root  "tweets#index" do

resources :tweets 
  resources :comments, only: [:create]
end
  resources :users, only: [:show]
end
잘 보세요.
...
...!!!
세 번째 줄의do의 기술 위치, 틀렸다!!
resources 방법은 컨트롤러와 동작을 간단하게 설정하는 편리한 방법으로 기본 컨트롤러의 7개의 동작 이름에 대해 자동으로 루트를 생성한다.
상세 정보여기 기사 주세요..
기술하는 방법은 이런 느낌이다.↓
resources :コントローラ名 do
그리고 여기서 리소스 방법을 끼워 넣는 구조로 한다.
그러므로 정확한 기술은 다음과 같다↓
routing.rb
Rails.application.routes.draw do
  devise_for :users
  root  "tweets#index" 

resources :tweets do
  resources :comments, only: [:create]
end
  resources :users, only: [:show]
end
어려운 문제지만 명탐정도 완전히 해결했어!

--
실수 해결은 어렵지만 풀수록 재밌어!조금만 더 노력하자!이렇게 긍정적인 마음이 들 거예요.
다음 목표가 정해졌기 때문에 (※ 서서 발동하는 것은 아니다) 복습을 하면서 오류에 도전하고 싶습니다.
...계속해.

좋은 웹페이지 즐겨찾기