즉, 프로그래밍[Ruby & Rails]을 배워서 오류를 빨리 해결하자!사고의 틀~
아직도 지식적인 이상한 점이 많아서 매번 이상한 땀이...
이번에 나는 잘못을 해결할 생각을 쓰고 싶다.
오류 발생!명탐정도 출동!
이미 시리즈화된 [명탐정도]
뇌내 BGM은 파나소닉이나 창목마의를 틀면서 읽어주세요.
이번 오류는'투고 화면에서 이미지와 텍스트를 투고했지만 이미지만 반영되지 않았다'는 것이다.
뭐랄까, 이것은 언뜻 보기에 매우 흔히 볼 수 있는 잘못이다.
근데 사실은 좀 귀찮은 잘못이야.
뭐가 귀찮아요?
우선 이번에 오류가 발생한 절차를 고려해 보자.
1. 새로운 발언 화면 표시
2. 발언 내용 입력
3. 버튼을 눌러 발송
4. 발언 내용을 DB에 저장
5. DB에 저장된 발언 내용을 일람 페이지에 표시
MVC 프로세스로 이것을 생각해보면 그림처럼 된다.
이 때문에 일련의 처리에서 오류가 발생했다.
그래도 이 서류를 하나하나 들여다보면 시간이 많이 걸린다.
특히 보기 파일의 코드 기술량도 매우 많기 때문에 한 줄 한 줄 참조하는 것은 매우 어렵다.
용의자의 서류가 좀 많은데, 이것은 이번의 골칫거리이다.
어떻게 찾습니까?
따라서 이번에는 처리 절차에서 범위를 좁히는 방법을 선택해 오류를 찾자.
이런 생각을 할 수 있다면 최소한의 검사를 통해 잘못된 곳을 신속하게 확인할 수 있습니다!
그럼 바로 머리를 쥐어짜는 수사를 시작하겠습니다!
먼저 SequelPro를 시작하여 테이블을 확인합니다.
방금 투고한 내용이 정확하게 반영되었는지 살펴봅시다.
텍스트 오른쪽은 이미지 막대이고 값은 NULL입니다.
투고한 정보가 DB에 들어가지 않았음을 알 수 있다는 것이다.
처리 프로세스에서 역주행으로 오류가 발생하지 않기 때문에 index의 보기 파일에서 오류가 발생할 가능성을 배제할 수 있습니다.
이어서 컨트롤러의create 동작에서 binding을 합니다.pry를 실행합니다.
binding.pry는 설명된 부분까지 처리할 수 있습니다.
터미널에서 params를 입력하면 안에 어떤 변수가 있는지 확인할 수 있습니다.
tweets_controller.rb
def create
Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id)
binding.pry
end
이런 느낌으로 기술하고 투고 버튼을 클릭한 후 단말기 화면을 확인하면 컨트롤러가 기술하기 전의 처리 절차가 정확하게 진행되는 것 같다.새 동작의 보기 파일과 루트에 오류가 발생하지 않았다는 뜻이다.
이렇게 해서 반으로 줄였어요!
아까 콘솔 화면을 좀 더 자세히 보세요.
[2]pry(#Tweetscontroller)> image
에 오류가 발생했다고 쓰여 있다.이번 컨트롤러 안에는create Action 내와string 매개 변수에만 이미지 기록이 있습니다. 이 두 곳을 살펴보겠습니다.
tweets_controller.rb
private
def tweet_params
params.permit(:text)
end
...응?봐라, 찾았다!!!
이 코드를 자세히 읽은 후 플래시 파라미터에서 허용되는 값은 text밖에 없다는 것을 발견했습니다.
플래시 파라미터는 원래 부정확한 정보(예를 들어 데이터를 고친 기술)를 보내는 것을 방지하기 위해 안전을 강화하기 위해 설명한 것이다.
하지만 이번에는 허가받아야 할 이미지 값을 기재하는 것을 잊어버려 차단됐고, 값은 DB에 저장되지 않은 것 같다.
명탐정도 완벽하게 잘못을 해결했어!
--
내일 드디어 시험이 있어서 나는 복습하고 있다
"아! 이런 일이구나!"
납득할 수 있는 부분이 늘었다(시험 전날까지만 해도 이런 상태였구나, 그렇게 구박하지 마세요)
도대체 내일 시험에 한꺼번에 통과할 수 있을까?!
...계속해.
Reference
이 문제에 관하여(즉, 프로그래밍[Ruby & Rails]을 배워서 오류를 빨리 해결하자!사고의 틀~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moso/items/72590ac2635fd6ace614텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)