使用Sinatra显示错误消息

cap*_*ght 7 error-handling datamapper sinatra

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

u = User.new
u.email = params[:email]
u.save
if u.save
  redirect '/'
else
  u.errors.each do |e|
    puts e
  end
end
Run Code Online (Sandbox Code Playgroud)

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

Her*_*ric 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
Run Code Online (Sandbox Code Playgroud)

然后你需要说出你想要显示flash [:error]的位置.通常我把它放在我在内容中产生的layout.haml或(erb)文件中.

layout.haml:

- if flash[:error]
  %p
    = flash[:error]
Run Code Online (Sandbox Code Playgroud)

此外,请确保包含gem并启用会话

require 'sinatra'
require 'sinatra/flash'

enable :sessions
Run Code Online (Sandbox Code Playgroud)

你也可以试试' rack-flash '宝石.有一个教程可以在http://ididitmyway.heroku.com/past/2011/3/15/rack_flash_/上使用它