У меня есть следующее маленькое приложение Sinatra (я удалил лишний ненужный код):
helpers do
def flash(args={})
session[:flash] = args
end
def flash_now(args={})
@flash = args
end
end
before do
@flash = session[:flash] || {}
session[:flash] = nil
end
post '/post' do
client = Twitter::Client.new(:login => 'xxxxxxx', :password => 'xxxxxxx')
username = params[:username]
type = params[:type]
tags = params[:tags]
budget = params[:budget]
if username != '' && type != '' && tags != '' && budget != ''
message = username + ' is looking for a ' + type + ' with ' + tags + ' skills. Budget = ' + budget + ' #freelance #job'
status = client.status(:post, message)
flash(:notice => 'Gig posting sent successfully!')
else
flash(:error => 'Gig posting unsuccessful - please check the marked fields!')
end
redirect '/'
end
И затем у меня есть следующее в файле шаблона базового макета HAML, который использует приложение:
#message
- if @flash[:error]
%p.error
= @flash[:error]
- if @flash[:notice]
%p.notice
= @flash[:notice]
Итак, теоретически, когда кто-то публикует сообщение, вызывается помощник flash () и устанавливается переменная сеанса, тогда запрос перенаправляется, когда включается фильтр before, и он должен установить переменную сеанса в экземпляр переменная доступна по шаблону.
Однако я не могу понять, почему он не печатает сообщение в шаблоне.
Есть идеи?