2016-04-27 10 views
1

Die render_to_string verwendet, um erb Ansicht auszuführen. Die Erb-Ansicht ruft call content_for auf. Ist es möglich und wie man content_for Daten aus dem Bereich holt, wo render_to_string aufgerufen wird?get content_for from render_to_string

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

Und umgekehrte Frage. Wie content_for data aus dem gleichen scope in die erb view einfügen?

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

Antwort

1

Es kann als Lösung als Abhilfe gesagt werden. Verwenden Sie das spezielle Layout-Ansicht, die vorwärts content_for Daten-Controller:

Der content_for an den Controller-Forwarder (Layoutsicht):

fetch_content_for.erb

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

Der Controller:

test.rb :

helper_method :fetch_content_for 

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

Render wi th content_for fetching, irgendwo in der Steuerung:

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

Und umgekehrte Frage. Setzen geholt content_for Daten erb Ansicht:

test_view.erb:

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