【发布时间】:2014-09-08 18:14:24
【问题描述】:
由于某种原因,我无法将局部变量传递给显示视图...
在我的控制器中,我只是:
def show
render template: "books/show", :resource => "Some text"
end
在我看来,我打印以下内容:
<h1>My local variable text: <%= resource %></h1>
我收到以下消息:
undefined local variable or method `resource' for #<#<Class:0x00000118ebce90>:0x00000118ec3498>
我在控制器中尝试了以下语法:
render template: "books/show", locals: { resource: "Some text" }
render template: "books/show", locals: { resource => "Some text" }
render template: "books/show", :locals => { resource: "Some text" }
render template: "books/show", :locals => { resource => "Some text" }
没有运气...
有什么线索吗?
谢谢!
【问题讨论】:
-
为什么需要传递局部变量而不是实例变量?我假设“某些文本”是一个占位符,否则在视图中显示它会更有意义。我将局部变量传递给局部变量,但将实例变量传递给基本视图。 Locals 暗示它只在本地需要,之后可以清理。否则这是我的 2 秒 Googling your question
-
不,比这更复杂! “一些文本”只是为了说明......我正在传递不同的对象,具体取决于我调用模板的位置。为此,我别无选择,只能添加为视图定义局部变量的能力...
-
例如,我从控制器或装饰器调用模板。这个模板也用于不同的类,因为它们在很多方面都非常相似......
-
那么我建议不要问这样一个广泛的问题,并指定总体问题是什么,这样人们可以帮助解决这个问题并提供设计建议。如果我必须共享视图方面,我通常会将它们撕成部分并传递一个更通用命名的对象来处理相似之处,但这只是我。真的,我会发布实际问题,人们会更愿意提供帮助
标签: ruby ruby-on-rails-3 ruby-on-rails-4 view controller