2016-04-27 9 views
1

erbビューの実行に使用されるrender_to_string。 erbビューは、content_forを呼び出します。それは可能ですか?render_to_stringが呼び出されたスコープからcontent_forデータを取得する方法はありますか?render_to_stringからcontent_forを取得

test.rb:

string = render_to_string partial: "test_view", :layout => false 
data = get_content_for_data(:data) # "some data ..." 

test_view.erb:

<% content_for :data do %> 
    some data ... 
<% end %> 

と逆質問。どのように同じ範囲からのデータをcontent_forのビューをerbに置く?

test.rb:

data = "some data ..." 
put_content_for_data(:data, data) 
string = render_to_string partial: "test_view", :layout => false 

test_view.erb:

<%= yield :data %> 

答えて

1

ことがあるが、回避策として溶液といえます。

content_forフォワーダ(レイアウト図)をコントローラに:

test.rb:

<%= yield %> 
<% fetch_content_for :data, content_for(:data) %> 

コントローラ

fetch_content_for.erbコントローラに転送content_forデータは特別なレイアウトビューを使用:

helper_method :fetch_content_for 

def fetch_content_for(tag, content) 
    @content_for[tag] = content 
end 

レンダリングwiコントローラ内のどこかのcontent_取得:コントローラ内のどこか

string = render_to_string 
    partial: "any_view", 
    layout: "fetch_content_for" 
data = @content_for[:data] 

逆の質問。 ERBビューに取り込まれたcontent_forデータを置く:

test_view.erb:

<%= @content_for[:data] # put fetched data %> 
<%= yield :data   # put normal content_for data %>