sinatra-flash gem不起作用

时间:2015-01-14 17:06:15

标签: ruby sinatra

我尝试在我的应用程序中使用sinatra-flash gem并获得一个未定义的局部变量或方法' flash'"我尝试运行它时出错。

my_app应用:

require 'sinatra/base'
require 'sinatra/flash'

class GGInfraUserManager < Sinatra::Base
enable :sessions
register Sinatra::Flash

...(应用程序的其余部分)

post '/' do

flash[:error] = "Password must be a minimum of 8 characters" unless new_password.match /.{8}/
log.info "#{Time.now} password meets policy requirements"
end
redirect '/'
end

在我的erb视图文件中(在顶部):

<div id="flash" class="notice">
<a class="close" data-dismiss="alert">&#215;</a>
<%= flash.now[:error] %>
</div>  

有人可以告诉我如何纠正此错误,以便闪存功能正常工作吗?

1 个答案:

答案 0 :(得分:3)

虽然宝石似乎足够舒适,但为什么不自己实施它。事实上它只是几行:

#in your app.rb:
helpers do

  #a partial helper
  def partial(template, locals = {})
    slim template, :layout => false, :locals => locals
  end

  #the flash helper
  def flash
    @flash = session.delete(:flash)
  end
end

get '/' do
  session[:flash] = ["Some happy news", "alert-success"]
end

然后你可以添加一个我称之为partial_flash.slim

的局部视图
-if flash
  -message, status = @flash
  .alert class=(status) = message

您通常从布局文件或需要Flash消息的任何其他视图调用该部分:

==partial :partial_flash

因此调用路径,加载布局并检查if flash。如果有,则显示具有指定类的flash消息。我使用Twitter Bootstrap,因此alert-success是一个绿色的消息框。

您可以在此处查看示例应用:https://github.com/burningTyger/farhang-app