Error handling 使用Sinatra显示错误消息

Error handling 使用Sinatra显示错误消息,error-handling,sinatra,datamapper,Error Handling,Sinatra,Datamapper,我正在编写一个简单的应用程序,它接受用户的标准输入。至于电子邮件条目,我让它验证它是否为标准电子邮件格式,然后让它在保存新实例时列出如下问题: u = User.new u.email = params[:email] u.save if u.save redirect '/' else u.errors.each do |e| puts e end end 我知道,如果它是正确的,它应该返回到主页。如果它是错误的,我希望它也返回到主页,但我希望它返回一个错误值(这样我可以

我正在编写一个简单的应用程序,它接受用户的标准输入。至于电子邮件条目,我让它验证它是否为标准电子邮件格式,然后让它在保存新实例时列出如下问题:

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

我知道,如果它是正确的,它应该返回到主页。如果它是错误的,我希望它也返回到主页,但我希望它返回一个错误值(这样我可以有一个弹出窗口或屏幕上的东西,让用户知道电子邮件的格式是错误的)。做这件事的最佳方法是什么?

使用Javascript可以节省往返的潜在成本。在我看来,像这样的简单验证是一个客户端函数,由附加到onBlur事件的一些代码处理,而不是我需要验证的东西(显然,除了消毒)

为了直接回答您的问题,我使用常规实例变量在
@errors
中存储了一个“error数组”。特定于表单的错误,或需要显示在页面上某个位置而不是顶部的错误,会存储在
@Form\u errors
或类似内容中。然后模板检查是否存在错误并相应地呈现它们。

您可以使用“”gem显示各种错误/通知等

u = User.new
u.email = params[:email]
u.save
if u.save
  redirect '/'
else
  flash[:error] = "Format of the email was wrong."
  redirect '/'
end
然后你需要说出你想在哪里显示flash[:error]。通常我把它放在layout.haml或(erb)文件中,就在我在内容中让步的地方

layout.haml:

- if flash[:error]
  %p
    = flash[:error]
另外,请确保包括gem和enable会话

require 'sinatra'
require 'sinatra/flash'

enable :sessions
你也可以试试“宝石”。网站上有一个使用它的教程