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

Другие вопросы по тегам