sinatra-redirect-with-flashgemを使用してフラッシュ メッセージを表示したい。
ここに私のルビーコードがあります:
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。
どうすればこの問題を解決できますか?
を使用してアプリを実行すると、別の問題も発生しshotgunます。get '/'メソッドで、代わりに を使用するflash[:error]とflash.now[:error]、フラッシュ メッセージがページに表示されません。
私はこのチュートリアルを隠していますが、いくつかの違いを作りました:
erb->haml- クラシック シナトラ アプリ -> サブクラス化
Sinatra::Base rack-flash->sinatra-flash
ここでコード全体を参照できます。
回答/コメントありがとうございます。