从render_to_string获取content_for

时间:2016-04-27 05:37:05

标签: ruby-on-rails

用于执行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 %>

1 个答案:

答案 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 %>