使用Sinatra显示错误消息

时间:2011-08-21 05:30:00

标签: 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

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

2 个答案:

答案 0 :(得分:11)

您可以使用' sinatra-flash' 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并启用会话

require 'sinatra'
require 'sinatra/flash'

enable :sessions

你也可以试试' rack-flash'宝石。有一个在http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/

使用它的教程

答案 1 :(得分:2)

您可以通过在Javascript中来回保存可能代价高昂的旅行。我看到它的方式,像这样的简单验证是一个客户端函数,由附加到onBlur事件的一些代码处理,而不是我需要验证的东西(显然除了清理)。

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