Rails - Como salvar a saída HTML de um HAML parcial como uma string para enviar para um serviço externo?

StackOverflow https://stackoverflow.com/questions/1261422

Pergunta

Ei, primeiro post aqui, espero que você possa me ajudar.

Estamos gerando um boletim automaticamente a cada 24 horas, utilizando uma tarefa rake. Há uma seção no topo do boletim em que um administrador pode colocar uma mensagem personalizada. A tela que os usos de administração tem uma visualização ao vivo do boletim (eram insistente sobre isso), processado usando um haml parcial que leva uma coleção.

A fim de gerar e enviar os e-mails, estamos enviando documentos XML para um terceiro API partido que contêm (entre outras coisas) a HTML para o e-mail que gostaria de gerar.

O que eu quero fazer é salvar a saída deste haml parcial dentro de uma tarefa rake, algo semelhante ao ob de PHP _ * () tamponantes funções. Existe alguma maneira de fazer algo como o seguinte:

ob_start();
render :partial => newsletter, :collection => posts
newsletter_html = ob_get_contents()
xml = "
<Creative>
  <Name>Our Newsletter -- #{Time.now.strftime('%m/%d/%Y')}</Name>
  <HTML>&lt;html&gt;&lt;body&gt;#{newsletter_html}&lt;/body&gt;&lt;/html&gt;</HTML>
  ...
</Creative>"

Eu sou provavelmente faltando alguma coisa óbvia, e eu poderia pensar em algumas maneiras de fazer isso, mas a maioria deles não estão secos e eu não quero estar gerando um monte de html nas ajudantes, modelos, ou a tarefa em si.

Deixe-me saber se há uma maneira para eu fazer isso. Obrigado.

Foi útil?

Solução

Uma maneira comum de fazer isso (que normalmente é desaconselhadas) é tornar em uma corda em seu modelo ou ancinho tarefa:


cached_content = 
  ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial => "newsletter", :locals => {:page => self,:collection => posts})

veja aqui para uma descrição mais completa: http: // www .compulsivoco.com / 2008/10 /-rendering-rails-parciais in-a-modelo-ou-background-tarefa /

Se você estiver usando página ou cache de fragmento, você pode puxar o conteúdo do cache. A maneira mais fácil de fazer isso é apenas para habilitar o cache, e depois olhar para onde os arquivos estão sendo colocados.

http://guides.rubyonrails.org/caching_with_rails.html

Outras dicas

Uma abordagem mais directa do HAML docs :

require 'haml'
haml_string = "%p Haml-tastic!"
engine = Haml::Engine.new(haml_string)
engine.render #=> "<p>Haml-tastic!</p>\n"

Você vai ter que fazer um pouco de carga de trabalho se o modelo HAML e configurar todas as variáveis ??locais que precisam de interpolação, mas a flexibilidade pode compensar isso.

Um pouco de um tiro no escuro, mas se você verificar o rdoc para Haml-lo mais do que provável que tenha um método que aceita uma string e algumas variáveis ??e, em seguida, torna a saída.

Com ERB-lo seria algo parecido com:

require 'erb'

name = 'world'
template = 'hello <%= name %>'
template = ERB.new(template)
puts template.result(binding)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top