2012-02-24 90 views
0

在帮助我的方法,我使一个单独的部分为每个模板:渲染而没有经过局部变量

structure="" 
if(@page.theme_set = 1)       #line 1 
    render :partial => "first_theme.html", :locals => {:structure => structure} 
else 
    render :partial => "second_theme.html", :locals => {:structure => structure} 
end 
concat(structure)        #line 2 

谐音之内,我做到这一点;

<% structure << header %> 
<% structure << content_for_first_theme %> 
<% structure << footer %> 

这三个都是辅助方法。但是,如果我将第1行和第2行移动到部分,则结构不会呈现。我不想初始化局部变量并将局部变量传递给局部变量,而是从局部变量中进​​行渲染。我哪里错了?

回答

0

请解释更多..我不清楚这个给定的信息。我了解到,您希望结构中的html字符串显示在视图中。尝试<%= raw structure %>。我不确定我是否回答你的问题!

0

可能是我读过的最棘手的问题之一,但这里有几件事情,可以帮助让你感动:

首先,你如果条件将始终评估为true,则使用双等号(= =)找到平等。

if(@page.theme_set = 1) #this will always evaluate to true, use double equals (==) to find equality. 

接下来,如果你想渲染(部分)视图的东西,你不会看到任何东西,除非你在ERB标签<%使用等号=%>

<%= structure << footer %> 

最后,你似乎试图通过相同的局部变量来完成所有这些事情,并且传递了对局部变量的引用。如果是这种情况,只需使用实例变量@structure就足够了,它将可用于控制器,视图和帮助程序,因此不需要传递。