2012-11-21 59 views
0

有没有方法可以将内联HTML嵌入到变量视图中?这样的事情:将内联HTML放入变量

<% t = content_to_var do %> 
    <h1>The title</h1> 
<% end %> 

<% my_var = content_to_var do %> 
    <p>Watch this fine results:</p> 
    <table> 
    <tr><td>Value 1.1</td><td>Value 1.2</td></tr> 
    <tr><td>Value 2.1</td><td>Value 2.2</td></tr> 
    <tr><td>Value 3.1</td><td>Value 3.2</td></tr> 
    </table> 
<% end %> 

<%= render 'partial', { title: t, contents: my_var } 

请注意,我知道关于完全命名为“content_to_var”的函数缺失。仅举例而言。

我知道content_for和yield,但想通过本地人做同样的事情。

我不喜欢一个想法,做

my_var = '<table><tr><td>Value 1.1</td><td>Value 1.2</td></tr></table>'.html_safe 

它看起来丑陋。

+0

为什么你想要将这些变量传递给部分? views(和partials)的概念是它主要包含静态HTML(或XML,或者其他),并且你可以直接添加变量。 – Flauwekeul

回答

1

在旧版本的Rails,你可以做

<% t = capture do %> 
    <h1>The title</h1> 
<% end %> 

不知道有新版本

+0

是的!它在3.2中工作。你救了我。 – Paul

+1

在我看来,并不那么干净。不知道你的整个情况。但是我会将捕获转移到部分(而不是在那里使用捕获),并使用本地/实例变量来解决它。或者可能使用辅助方法而不是部分方法,并在你的rhtml的主循环中使用它们。 – 244an

+0

我管理的任务没有任何偏差。已经定义了一个数组,其中每个字符串都是通过捕获形成的,然后使用“each”。感谢任何回应 - 它帮助我选择最佳解决方案。 – Paul

2

为什么不直接渲染的谐音?这就是他们所做的。

你可以这样做:

<% t = render :partial => 'title', :title => 'The title' %> 
<% my_var = render :partial => 'values', :values => @values %> 

<% render :partial => {title: t, contents: my_var } %> 

以及物品是否完整,您的_title.html.erb看起来像

<h1><%= title %></h1> 

希望这有助于。

+0

我需要呈现从一个数组中取值的循环中的相同部分。 – Paul

+0

我不明白你想说那个评论。你想看到一个例子,其中一个部分被渲染成一个循环吗? – nathanvda