在最佳实践的世界中,您何时让视图继承控制器的实例变量,何时在本地散列中明确传递它们?
答案 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 %>!