我想使用sinatra-redirect-with-flash
gem 显示 Flash 消息。
这是我的红宝石代码:
require 'sinatra'
require 'sinatra/base'
require 'sinatra/flash'
require 'sinatra/redirect_with_flash'
require 'data_mapper'
require 'haml'
require 'builder'
# ...
class App < Sinatra::Base
enable :sessions
register Sinatra::Flash
helpers Sinatra::RedirectWithFlash
use Rack::MethodOverride
get '/' do
@notes = Note.all :order => :id.desc
@title = 'All TODOs'
if @notes.empty?
flash.now[:error] = 'No TODOs found. Add your first below.'
end
haml :home
end
post '/' do
n = Note.new
n.content = params[:content]
n.created_at = Time.now
n.updated_at = Time.now
if n.save
redirect '/', :notice => 'TODO saved successfully.'
else
redirect '/', :error => 'Failed to save TODO.'
end
end
# ...
end
并且views/layout.haml
是:
!!! 5
%html{:lang => "en"}
%head
%meta{:charset => "utf8"}
%body
%header
%hgroup
%h1
%a{:href => "/"}= SITE_TITLE
%h2= SITE_DESCRIPTION
#main
=styled_flash
=yield
成功添加 TODO 后,我希望'TODO saved successfully.'
在主页上看到 flash 消息。但是当我使用shotgun
. ruby app.rb
当我运行或运行时,Flash 消息显示得很好rackup
。
我怎么解决这个问题?
当我使用shotgun
. 在get '/'
方法中,如果我使用flash[:error]
而不是flash.now[:error]
,则 Flash 消息不会显示在页面上。
我正在修改本教程,但我提出了一些不同之处:
erb
->haml
- 经典 Sinatra 应用程序 -> 子类化
Sinatra::Base
rack-flash
->sinatra-flash
你可以在这里浏览整个代码。
感谢您的任何回答/评论。