【问题标题】:Displaying Error Message with Sinatra使用 Sinatra 显示错误消息
【发布时间】:2011-10-31 11:36:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: error-handling sinatra datamapper


    【解决方案1】:

    您可以使用“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_/有一个使用教程@

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-19
        • 1970-01-01
        • 2016-12-17
        • 2014-12-30
        相关资源
        最近更新 更多