视图:设置实例变量还是传入局部变量更好?

Jur*_*jka 1 ruby-on-rails

我对将变量从控制器传递到视图有疑问。最佳实践是什么,性能是什么,最后在局部变量中传递变量或将变量作为实例变量传递的优点和缺点是什么?例子:

controller.rb
@string = "Some string"
Run Code Online (Sandbox Code Playgroud)

然后在视图中:

view.erb
<%= @string %>
Run Code Online (Sandbox Code Playgroud)

或者更好地通过

controller.rb
render some_path,
      :locals => {
          :string => 'aww',
      }
Run Code Online (Sandbox Code Playgroud)

然后是内部视图:

<%= string %>
Run Code Online (Sandbox Code Playgroud)

对象、布尔值会怎样?性能有什么区别吗?什么是更好的做法?

问候

gyl*_*laz 5

在 Rails 中,最佳实践是将实例变量传递到视图。Rails 开发人员已经习惯了它,很熟悉,打字少,而且有效。

然而,我个人的偏好是传递localsrender,因为它使您的视图变量更加明确。如果您错误输入变量,它还有一个好处是引发“无方法”异常,而不是在使用实例变量时得到“nil”异常。

我不确定无论哪种方式,性能都会有很大差异。运行一些基准测试可能会很有趣。但如果您使用 Rails,那么视图渲染速度可能不是您最关心的问题。

请注意,如果您在控制器中使用实例变量来记忆方法的结果(例如缓存昂贵的计算),则该实例变量会“泄漏”到您的视图中。您的视图中可能不需要它,但您仍然得到它(因为 Rails 将控制器中的任何实例变量公开给您的视图)。因此,传递局部变量在传达“我的观点依赖于这个变量”时更加明确)