Ruby on rails 视图应如何获取其变量

Ruby on rails 视图应如何获取其变量,ruby-on-rails,Ruby On Rails,在最佳实践的世界中,什么时候让视图继承控制器的实例变量,什么时候在局部散列中显式传递它们?最佳实践是在控制器中设置变量 您不应该从控制器传递它们,因为它们将自动可见 #your_controller @name = "Pedro" #your view Hello, <%= @name %>! #您的_控制器 @name=“佩德罗” #你的观点 你好 您在控制器中定义的任何实例变量都将自动传播到视图,因此无需显式传递它们。这不仅适用于初始视图,也适用于过程中渲染的任何部分 调用同

在最佳实践的世界中,什么时候让视图继承控制器的实例变量,什么时候在局部散列中显式传递它们?

最佳实践是在控制器中设置变量

您不应该从控制器传递它们,因为它们将自动可见

#your_controller
@name = "Pedro"

#your view
Hello, <%= @name %>!
#您的_控制器
@name=“佩德罗”
#你的观点
你好

您在控制器中定义的任何实例变量都将自动传播到视图,因此无需显式传递它们。这不仅适用于初始视图,也适用于过程中渲染的任何部分

调用同一部分时,您需要发送
:locals
变量,但需要它呈现
:object
:collection
无法容纳的不同内容

下面是一个不正确使用实例变量的示例:

# Bad form
<%- @foo = 'example1' %>
<%= render(:partial => 'bar') %>
<%- @foo = 'example2' %>
<%= render(:partial => 'bar') %>
#格式不正确
“bar”)%%>
“bar”)%%>
更好的方法是:

<%= render(:partial => 'bar', :locals => { :foo => 'example1' }) %>
<%= render(:partial => 'bar', :locals => { :foo => 'example2' }) %>
'bar',:locals=>{:foo=>'example1'})%>
'bar',:locals=>{:foo=>'example2'})%>

不同之处在于,您将在部分中看到变量为
foo
,而不是
@foo
。请记住,局部变量可能是未定义的,除非它们传入会引起麻烦,所以请彻底测试。

即使视图和从该视图调用的部分将访问控制器中设置的实例变量,我也会将
局部变量
传递给部分变量,以便部分变量是可访问的“像一个带参数的自包含方法”。当我需要从一个完全不同的控制器呈现该分部时,我知道分部不依赖于任何其他变量,除了作为局部变量传递给它的变量。