关于视图应如何获取其变量

时间:2011-05-06 15:07:06

标签: ruby-on-rails

在最佳实践的世界中,您何时让视图继承控制器的实例变量,何时在本地散列中明确传递它们?

2 个答案:

答案 0 :(得分:5)

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

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

以下是不正确使用实例变量的示例:

# Bad form
<%- @foo = 'example1' %>
<%= render(:partial => 'bar') %>
<%- @foo = 'example2' %>
<%= render(:partial => 'bar') %>

更好的方法是:

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

区别在于您会将部分中的变量视为foo而不是@foo。请记住,局部变量可能是未定义的,除非它们被传递,这可能会导致麻烦,所以要彻底测试。

答案 1 :(得分:0)

好的做法是在控制器中设置变量。

您不应该从控制器传递它们,因为它们会自动显示

#your_controller
@name = "Pedro"

#your view
Hello, <%= @name %>!