HAML запускает встроенный Ruby, но ничего не рендерит
-#encoding: utf-8
:css
.hidden{display:none;}
%script{:src=>"/javascripts/jquery.js"}
%form{:action=>"https://get724.ccvb.com.tr/Get724/get724uye.aspx",:method=>"post"}
%input.hidden{:type=>"text",:name=>"uyeno",:value=>""}
%input.hidden{:type=>"text",:name=>"kkno",:value=>""}
%input.hidden{:type=>"text",:name=>"gectar",:value=>""}
%input.hidden{:type=>"text",:name=>"tutar",:value=>""}
%input.hidden{:type=>"text",:name=>"dcins",:value=>""}
%input.hidden{:type=>"text",:name=>"sipbil",:value=>""}
%input.hidden{:type=>"text",:name=>"sesbil",:value=>""}
%input.hidden{:type=>"text",:name=>"burl",:value=>""}
%input.hidden{:type=>"text",:name=>"hurl",:value=>""}
- t = Time.now.strftime("%Y%m%d%H%M%S")
- puts t
%input.hidden{:type=>"text",:name=>"zaman",:value=>"#{t}"}
-puts "adfasdf : " + @asdf.to_s
-puts "asdf"
-puts "asdf : " + @asdf.to_s
-puts session[:ewer]
-puts session[:zxcv]
-puts strtodigest
-digest = Digest::SHA1.base64digest(strtodigest)
-puts digest
-#%input{:type=>"text",:value=>"#{strtodigest}"}
-#%input{:type=>"text",:value=>"#{digest}"}
%input.hidden{:type=>"text",:name=>"ozet",:value=>"#{digest}"}
:javascript
$('form').submit();
-puts "End Of Haml"
У меня есть хамл, как выше, и я использую его в приложении Sinatra. Когда я запускаю свое приложение
haml :problem_haml
Каждая команда ruby работает отлично, но haml ничего не отображает. Даже не в одной строке, но каждая команда ruby начинается с "-" работает абсолютно идеально? Что может быть причиной? Пожалуйста, не отвечайте "потому что скрытый класс скрывает все", речь не идет о сокрытии css, буквально ни один байт не возвращается с сервера.
Редактировать:
Я уже говорил, что это приложение sinatra, но на самом деле это приложение Padrino. В то время как падрино - это всего лишь несколько приложений sinatra, которые запускаются внутри основного приложения sinatra, и все больше людей знают sinatra, я сказал sinatra, чтобы упростить вопрос.
Также вот код, который вызывает хамл,
def get3DSecure(ccname,price,skul,ccno,cvc)
puts "#############################################"
puts "get3DSecure function called"
puts "#############################################"
@ccname = ccname
@price = price.to_s + "00"
@skul = skul
@ccno = ccno
@cvc = cvc
session[:name] = ccname
session[:xmltosend] = makeXmlFor3D
session[:sipbil] = UUIDTools::UUID.random_create.to_s.delete!("-")
session[:sesbil] = UUIDTools::UUID.random_create.to_s.delete!("-")
session[:skul] = skul
session[:price] = price
session[:ccno] = ccno
session[:cvc] = cvc
puts "#############################################"
puts "get3DSecure function near end, render starts"
puts "#############################################"
render :adsecure,:layout=>:main
end
Он также без проблем записывает команды на консоль.
4 ответа
Я выяснил, что методы render или haml не возвращают. Так что, если вы находитесь в середине своей функции, вы должны сделать
return haml :problem_haml
Это решает проблему.
Ваш код работает для меня, хотя сначала я получил:
WARN: tilt autoloading 'haml' in a non thread-safe way; explicit require 'haml' suggested.
Потому что я забыл добавить:
require "haml"
В начале моего кода. Может ли это быть вашей проблемой?
Вы можете проверить, отправлена ли ваша форма, используя инструменты разработчика chrome, firebug или что-то в этом роде (проверьте POST), и если это так, поскольку существует запрос на публикацию, вам нужно обработать ответ, просто догадка
Обратите внимание, когда вы используете puts
внутри шаблонов haml / slim / erb, потому что у haml есть собственный метод put: http://haml.info/docs/yardoc/Haml/Exec/Generic.html
Итак, поскольку вы используете padrino, замените каждый пут на: logger.debug