Rails - 외부 서비스로 보내는 문자열로 HAML 부분의 HTML 출력을 저장하는 방법은 무엇입니까?

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

문제

안녕하세요 여러분, 여기에 먼저 게시 할 수 있기를 바랍니다.

갈퀴 작업을 사용하여 24 시간마다 뉴스 레터를 자동으로 생성하고 있습니다. 뉴스 레터 상단에는 관리자가 사용자 정의 메시지를 넣을 수있는 섹션이 있습니다. 관리자가 사용하는 화면에는 뉴스 레터의 실시간 미리보기가 있으며 (이에 대해서도 주장) 컬렉션을 취하는 Haml 부분을 사용하여 렌더링됩니다.

이메일을 생성하고 보내기 위해, 우리는 XML 문서를 제 3 자 API에 전송하여 생성하려는 이메일에 대한 HTML을 포함하는 타사 API에 보냅니다.

내가하고 싶은 것은 갈퀴 작업 내 에서이 HAML 부분의 출력을 저장하는 것입니다. PHP의 OB _*() 버퍼링 기능과 유사한 것입니다. 다음과 같은 일을 할 수있는 방법이 있습니까?

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>"

나는 아마도 명백한 것을 놓치고있을 것입니다. 나는 이것을 할 수있는 몇 가지 방법을 생각할 수 있었지만 대부분은 건조하지 않으며 도우미, 모델 또는 작업 자체에서 많은 HTML을 생성하고 싶지 않습니다.

내가 이것을 달성 할 수있는 방법이 있는지 알려주세요. 감사.

도움이 되었습니까?

해결책

이 작업을 수행하는 일반적인 방법 (일반적으로 권장되는)은 모델 또는 레이크 작업에서 문자열로 렌더링하는 것입니다.


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

자세한 설명은 여기를 참조하십시오.http://www.compulsivoco.com/2008/10/rendering-rails-partials-in-a-model-or-background-task/

페이지 또는 조각 캐싱을 사용하는 경우 캐시에서 내용을 꺼낼 수 있습니다. 이 작업을 수행하는 가장 쉬운 방법은 캐싱을 활성화 한 다음 파일이 배치되는 위치를 살펴 보는 것입니다.

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

다른 팁

더 직접적인 접근 Haml Docs:

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

HAML 템플릿을로드하고 보간이 필요한 로컬 변수를 설정하는 작업을 수행해야하지만 유연성이이를 수행해야합니다.

어둠 속에서 약간의 샷이지만 haml에 대한 rdoc을 확인하면 문자열과 일부 변수를 받아들이고 출력을 렌더링하는 메소드가있을 가능성이 높습니다.

ERB를 사용하면 다음과 같은 것처럼 보일 것입니다.

require 'erb'

name = 'world'
template = 'hello <%= name %>'
template = ERB.new(template)
puts template.result(binding)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top