在Rails 3中向partial传递值

12
以下是我如何将值/变量传递给局部视图的方法:
```html

这里是我如何将值/变量传递给局部视图:

```
<%= render "partials/banner", :locals => {:text_1 => t(:"main.home.banner_text_1"),
                                          :text_2 => t(:"main.home.banner_text_2") } %>

然后在局部文件中:

 <%= text_1 %> <%= text_2 %>

但是出现了“未定义的局部变量或方法text_1”

我应该在哪里设置这个变量,以便它可以从我应用程序中的所有视图和布局中访问?

谢谢!


我会想直接把<%= t("main.home.banner_text_1") %>放在partial里,这样可以吗?还是它们实际上是变量? - sarnold
2个回答

28
如果您有一些需要在所有视图中显示的内容,您也可以创建一个application_helper方法,例如:banner('Text', 'Content') 请尝试以下操作:
主页:
<%= render :partial => 'layouts/test',
           :locals => {:text_1 => t(:'text_1'), :text_2 => t(:'text_2')}
%>

部分:

<%= text_1 %> <%= text_2 %>

4
感谢加入 ":partial =>",最终解决了问题。不知道为什么没有它就不能工作? 无论如何,是的,我需要在所有视图中显示这个 - 你能提供更多关于 banner('text', 'content') 帮助方法的详细信息吗? 谢谢。 - bogumbiker

12

我相信Rails 3已经改变了传递局部变量的方式,类似于这样:

<%= render :partial => 'layouts/test',
       :text_1 => t(:'text_1'), :text_2 => t(:'text_2') %>

Rails将解析它,因为:text_1不是已知的键(如:collection或:as),所以它将其传递给局部本身。
您可以通过text_1或text_2访问它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接