24

delayed_jobxmlを介してリモートデータベースを更新するために使用しようとしています

私のlibフォルダーに、で実行する必要のあるクラスを含むファイルを配置しましたrender_to_textが、次のtemplate.xml.builderようになります。

undefined method `render_to_string' for #<SyncJob:0x7faf4e6c0480>...

私は何が間違っているのですか?

4

5 に答える 5

60
ac = ActionController::Base.new()
ac.render_to_string(:partial => '/path/to/your/template', :locals => {:varable => somevarable})
于 2012-09-26T01:40:44.573 に答える
7

未定義のヘルパーメソッドで問題が発生した後、使用しましたApplicationController

ApplicationController.new.render_to_string
于 2014-07-14T03:19:02.533 に答える
3

render_to_stringで定義されていActionController::Baseます。クラス/モジュールはRailsコントローラーのスコープ外で定義されているため、この関数は使用できません。

ファイルを手動でレンダリングする必要があります。テンプレート(ERB、Hamlなど)に何を使用しているのかわかりません。ただし、テンプレートをロードして自分で解析する必要があります。

したがって、ERBの場合、次のようになります。

require 'erb'

x = 42
template = ERB.new <<-EOF
  The value of x is: <%= x %>
EOF
puts template.result(binding)

テンプレートファイルを開いて内容をに送信する必要がありますERB.newが、その演習はあなたに任されています。これがERBのドキュメントです。

それが一般的な考え方です。

于 2010-04-20T19:47:05.463 に答える
3

Rails 5

render_to_stringその他は、コントローラーのクラスメソッドとして使用できるようになりました。したがって、好きなコントローラーで次のことを行うことができます。ApplicationController.render_to_string

特に、オブジェクトのクラスに基づいてテンプレートに動的インスタンス変数を割り当てる必要があったため、例は次のようになりました。

ApplicationController.render_to_string(
  assigns: { :"#{lowercase_class}" => document_object },
  inline: '' # or whatever templates you want to use
)

RailsをPRした開発者による素晴らしいブログ投稿:https ://evilmartians.com/chronicles/new-feature-in-rails-5-render-views-outside-of-actions

于 2019-02-26T20:05:34.893 に答える
2

あなたはあなたtemplate.xml.builderを部分的な( )に変えて、それをインスタンス化して呼び出す_template.xml.builderことによってそれをレンダリングすることができますActionView::Baserender

av = ActionView::Base.new(Rails::Configuration.new.view_path)
av.extend ApplicationController.master_helper_module
xml = av.render :partial => 'something/template'

まだxmlで試していませんが、htmlパーシャルでうまく機能します。

于 2010-12-15T16:28:47.400 に答える