2012-05-28 10 views
5

私はJSONで長いメッセージを返信したいシナリオがあります。それを文字列連結で書くのではなく、JSONにレンダリングできるerbテンプレートを組み立てたいと思います。以下は、私は現在しようとしているコードです:RABLテンプレートでERBテンプレートをレンダリングする

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 

すべては、このコードが実行されると予想最初の時間として働くが、それが欠落しているインスタンス変数があると言うので、しかし、私は問題に私はそれを実行する第二の時間を実行します(私は最初の実行中に生成され、キャッシュされたと仮定します)。

#(ActionView ::テンプレート::エラー)

のための未定義のメソッド _app_views_invitation_mailer_rsvp_sms_text_erb___2510743827238765954_2192068340 はrablにERBテンプレートをレンダリングするための良い方法はありますか?

答えて

2

あなたはそうのように、スタンドアロンとしてERBを使用して、ビューレンダラを介さないで試みることができる:

object @invitation 

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

bindingは(カーネルモジュールを介して)オブジェクトのメソッドであり、それは保持するバインディングを返します。これはあなたが得るのを助ける場合

が本当に知ってはいけない。また、インスタンス変数(この場合は@invitation

アップデートが含まれて現在のコンテキスト、私は時間があるときに

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

私は実際にRablでこれを試してみてください:任意の更なるが、ここでは、スタンドアロン方式でERBテンプレートをレンダリングするための別の方法です(と私はまた、あなたがこの投稿から1年以上となっています実現しました) 。

関連する問題