2011-08-21 4 views
7

사용자로부터 표준 입력을받는 간단한 응용 프로그램을 작성하고 있습니다. 이메일 항목에 관해서는, 나는 그것이 표준 전자 메일 형식 인 경우는 확인이 새로운 인스턴스가 저장 될 것입니다 때 그것은이 같은 문제를 나열했다 :Sinatra와 함께 오류 메시지 표시

내가 아는
u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    u.errors.each do |e| 
    puts e 
    end 
end 

가인지하는 경우 올바른 경우 홈 페이지로 돌아 가야합니다. 그것이 틀린 경우에도 홈 페이지로 돌아가고 싶지만 오류 값을 반환하기를 원합니다 (팝업 또는 사용자가 전자 메일 형식이 잘못되었음을 알리는 화면 상에 뭔가가있을 수 있습니다).). 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

11

당신은

u = User.new 
u.email = params[:email] 
u.save 
if u.save 
    redirect '/' 
else 
    flash[:error] = "Format of the email was wrong." 
    redirect '/' 
end 

그런 다음 당신은 당신이 플래시 원하는 위치 말할 필요 등의 오류/공지 사항의 모든 종류를 표시합니다 ' sinatra-flash'보석을 사용할 수 있습니다. 일반적으로 나는이 내용을 layout.haml 또는 (erb) 파일에 넣는다.

layout.haml :

또한
- if flash[:error] 
    %p 
    = flash[:error] 

, 당신이 보석을 포함하고 가능 세션

require 'sinatra' 
require 'sinatra/flash' 

enable :sessions 

당신은 또한 'rack-flash'보석을 시도 할 수 있습니다. 그것을 사용하기위한 튜토리얼은 http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/

입니다.
2

잠재적으로 값 비싼 여행을 자바 스크립트로 앞뒤로 저장할 수 있습니다. 내가보기에이 간단한 검증은 클라이언트 함수로, onBlur 이벤트에 첨부 된 코드에 의해 처리됩니다. 내 측면에서 검증해야하는 것은 아닙니다 (분명히 위생 처리 제외).

직접 질문에 대답하기 위해 나는 보통 배열 변수를 사용하여 @errors에 "오류 배열"을 저장했습니다. 양식 별 오류 또는 상단의 페이지가 아닌 특정 위치에 표시해야하는 오류는 @form_errors 또는 비슷한 것으로 저장됩니다. 그런 다음 템플릿은 오류가 있는지 확인하고 그에 따라 렌더링합니다. [오류] 표시 할

관련 문제