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

あなたは、などのエラー/通知のすべての種類を表示するには、「sinatra-flash」宝石を使用することができます

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

次に、あなたがフラッシュする場所を言う必要がある[:エラー]が表示されます。通常、私はコンテンツの中でyield.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

潜在的に高価な旅行をJavascriptで行うことで前後に保存することができます。このような単純な検証はクライアント関数で、onBlurイベントに添付されたコードによって処理されます。私の側で検証する必要はありません(明らかにサニタイズを除く)。

質問に直接答えるために、私は@errorsに "エラー配列"を格納するために通常のインスタンス変数を使用しました。フォーム固有のエラー、または上部のページではなくページの特定の場所に表示する必要があるエラーは、@form_errorsなどに格納されます。テンプレートは、エラーがあるかどうかをチェックし、それに応じてレンダリングします。

関連する問題