2016-04-27 42 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數據到控制器的特殊佈局視圖:

的content_for到控制器轉發器(佈局圖):

fetch_content_for.erb

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

控制器:

test.rb :

helper_method :fetch_content_for 

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

渲染無線獲取內容,在控制器中的某個位置:

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

並反向提問。把獲取content_for數據ERB觀點:

test_view.erb:

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