用于执行erb视图的render_to_string。 erb视图调用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 %>
答案 0 :(得分: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
使用content_for获取渲染,在控制器的某处:
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 %>