2011-08-21 130 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或类似内容中。然后模板检查是否存在错误并相应地呈现它们。