从局部内部渲染而不传递局部变量

时间:2012-02-24 12:21:02

标签: ruby-on-rails ruby-on-rails-3 renderpartial partials

在我的帮助方法中,我为每个模板渲染一个单独的部分:

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行移动到部分,则结构不会呈现。我不想初始化并将局部变量传递给局部变量,而是从局部变量中渲染。我哪里错了?

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 就足够了,它可供控制器,视图和帮助程序使用,因此不需要传递。