在我的帮助方法中,我为每个模板渲染一个单独的部分:
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 :(得分:0)
请解释更多..我不清楚这个给定的信息。我知道你希望在视图中显示结构中的html字符串。试试<%= raw structure %>
。我不确定我是否回答了你的问题!
答案 1 :(得分:0)
可能是我读过的最令人困惑的问题之一,但这里有一些可能会让你感动的事情:
首先,if条件将始终求值为true,使用double equals(==)来查找相等。
if(@page.theme_set = 1) #this will always evaluate to true, use double equals (==) to find equality.
接下来,如果您尝试在视图中呈现某些内容(部分),除非您在erb标记中使用等号,否则您将看不到任何内容&lt;% = % &GT;
<%= structure << footer %>
最后,您似乎试图通过相同的局部变量并将引用传递给partials来完成所有这些操作。如果是这种情况,只需使用实例变量 @structure 就足够了,它可供控制器,视图和帮助程序使用,因此不需要传递。