我尝试在我的应用程序中使用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">×</a>
<%= flash.now[:error] %>
</div>
有人可以告诉我如何纠正此错误,以便闪存功能正常工作吗?
答案 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