2012-05-28 12 views
5

Mam scenariusz, w którym chciałbym przekazać długą wiadomość z moim JSON. Zamiast pisać go z łączeniem ciągów wolałbym utworzyć szablon erb, który mogę renderować do mojego JSON-a. Poniżej znajduje się kod Obecnie próbuję:Renderuj szablon ERB w szablonie RABL

object @invitation 

node(:phone_message) do |invitation| 
    begin 
    old_formats = formats 
    self.formats = [:text] # hack so partials resolve with html not json format 
    view_renderer.render(self, {:template => "invitation_mailer/rsvp_sms", :object => @invitation}) 
    ensure 
    self.formats = old_formats 
    end 
end 

Wszystko działa zgodnie z oczekiwaniami po raz pierwszy w tym kod jest uruchamiany, jednak ja napotkasz problemy drugi raz go uruchomić, ponieważ mówi, że to brakuje zmiennej instancji (które, jak zakładam, zostało wygenerowane i zbuforowane podczas pierwszego uruchomienia).

metoda niezdefiniowany _app_views_invitation_mailer_rsvp_sms_text_erb___2510743827238765954_2192068340 na # (actionView :: Template :: Error)

Czy istnieje lepszy sposób, aby uczynić szablony ERB w Rabl?

Odpowiedz

2

Można spróbować użyć ERB jako samodzielny i nie przechodzi widoku renderujący, tak:

object @invitation 

node(:phone_message) do |invitation| 
    begin 
    template = ERB.new(File.read("path/to/template.erb")) 
    template.result(binding) 
    end 
end 

binding to metoda na obiekcie (poprzez moduł jądra) i zwraca wiązania który trzyma obecna sytuacja, która obejmuje również zmienne instancji (@invitation w tym przypadku)

Aktualizacja:

naprawdę nie wiem, czy to pomoże Ci uzyskać dalej (i ja też sobie sprawę, że już ponad rok od kiedy pisał ten temat), ale tu jest inna droga do renderowania szablonów ERB w samodzielny sposób:

view = ActionView::Base.new(ActionController::Base.view_paths, {}) 

class << view 
include ApplicationHelper 
include Rails.application.routes.url_helpers 
end 
Rails.application.routes.default_url_options = ActionMailer::Base.default_url_options 
view.render(:file => "path/to/template.html.erb", :locals => {:local_var => 'content'}) 

Kiedy mam czas, mam faktycznie spróbować tego z Rabl .

Powiązane problemy