我想使用sinatra-redirect-with-flash
寶石顯示閃存消息。爲什麼Sinatra-redirect-with-flash gem與霰彈槍搭配使用?
這裏是我的Ruby代碼:
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.'
。但是,當我使用shotgun
運行我的應用程序時,重定向後不會顯示任何閃存消息。當我運行ruby app.rb
或rackup
時,Flash消息顯示得很好。
我該如何解決這個問題?
當我使用shotgun
運行應用程序時,也會發生另一個問題。在get '/'
方法中,如果我使用flash[:error]
而不是flash.now[:error]
,則Flash頁面上不會顯示。
我shadowning this tutorial,但我做了一些不同之處:
erb
- >haml
- 經典西納特拉應用程序 - >子類
Sinatra::Base
rack-flash
- >sinatra-flash
你可以瀏覽整個代碼here。
感謝您的任何答覆/評論。