2012-05-28 19 views
5

JSON'umla uzun bir iletiyi geri göndermek istediğim bir senaryo var. Dize birleştirme ile yazmak yerine JSON'uma işleyebileceğim bir erb şablonu oluşturmayı tercih ederim. Aşağıda Şu anda çalışıyorum kodudur:RABL'da ERB Şablonu Oluştur Şablon

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 

Her şey bu kod çalıştırılır beklenen ilk defa olarak çalışan bir eksik örnek değişkeni olduğunu söylüyor çünkü, ancak, sorunlarla bunu çalıştırmak ikinci kez çalıştırmak (ilk çalışma sırasında üretildiğini ve önbelleğe alındığını varsayalım).

# (ActionView :: Şablon :: Hata)

Rabl içine erb şablonları işlemek için daha iyi bir yolu var mı için tanımsız yöntem _app_views_invitation_mailer_rsvp_sms_text_erb___2510743827238765954_2192068340 ?

cevap

2

Sen bağımsız olarak ERB kullanmayı deneyin, ve, görünüm Oluşturucu geçiyor şöyle olamazdı:

object @invitation 

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

binding (Kernel modülü aracılığıyla) Nesne üzerinde bir yöntem olup, tutan bağlayıcı döndürür (Bu durumda @invitation) da örnek değişkenler içeren şimdiki bağlam,

Güncelleme: bu yardımcı olacaktır eğer

gerçekten bilmiyorum Zamanım olduğunda

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'}) 

Aslında Rabl ile bu denemelisiniz: Başka, ama burada bağımsız bir şekilde ERB şablonları işlemek için başka bir yol (ve aynı zamanda bu yayınlanmıştır üzerinden bir yıldan fazla oldu fark) .

İlgili konular