2011-08-21 106 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 

然後,你需要說你想要的閃光燈各種錯誤/通知書等[:錯誤]顯示。通常我把它放在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

通過在Javascript中執行操作,您可以節省一筆潛在的昂貴旅程。我看到它的方式,像這樣的簡單驗證是一個客戶端函數,由附加到onBlur事件的一些代碼處理,而不是我需要在我身邊進行驗證(顯然除了清理)。

要直接回答你的問題,我使用了常規實例變量來存儲@errors中的「錯誤數組」。特定於表單的錯誤或需要顯示在頁面上的某個位置而不是頂部的錯誤將存儲在@form_errors或類似內容中。然後模板檢查是否存在錯誤並相應地呈現它們。