Sinatra에 오류 메시지가 표시되지 않는 문제

3224 단어 Ruby
현재 시나트라를 이용해 게시판을 제작하고 있는데, 잘못된 정보 실현에 당혹스러워 드리는 겁니다.

전제 조건


투고 형식의 입력란은 제목과 본문이다.
둘 다 비울 수 없어요.
검증이 끊겼을 때 발언 형식으로 돌아가 오류 정보를 표시합니다.

이것은 실제 완성된 페이지입니다.

간고한 곳


처음엔 "발리데이를 만났으면 잘못된 정보를 배열해서 뷰에 넘기는 게 간단하지 않겠나"라고 생각했어요.
하지만 뷰가 표시되지 않는 이유는 다음과 같습니다.
그래서 Debuga에서 봤는데 어느새 nil로 배열되었어요.
그거 뜨면 안 돼!(웃음) 이렇게 생각하면서 원인을 찾았다.

해결책


최초의 나의 코드는 다음과 같다.
post '/posts/create' do
  @post = Post.new(title: params[:title], body: params[:body])
  if @post.save
    redirect '/posts/page/1'
  else
    @errors = @post.errors.full_messages.uniq!
    redirect '/posts/new'
  end
end
redirect가 문제야.
Redirect에 걸리면 동작이 다시 호출되기 때문입니다.니가 됐어.
그래서, 나는 Redirect를 할 줄 모르니, 직접 View 파일을 너에게 건네주겠다.
post '/posts/create' do
  @post = Post.new(title: params[:title], body: params[:body])
  if @post.save
    redirect '/posts/page/1'
  else
    @errors = @post.errors.full_messages.uniq!
    erb :new_post
  end
end
이렇게 하면 안전하게 오류 정보를 표시할 수 있다.

총결산


이번에는sinatra에 잘못된 정보를 표시하는 방법을 총결하였다.
시나트라는 참고할 만한 사이트가 많기 때문에 나 자신도 고전하고 있다.
같은 환경의 사람이 해결할 수 있는 계기가 됐으면 좋겠어요.

좋은 웹페이지 즐겨찾기