2006年4月25日,星期二

使用 params,而不是 @params

作者:marcel

我仍然经常在 #rubyonrails 频道看到有人在代码中使用 @params。现在 @params 已经被弃用,取而代之的是简单的 params。对于那些只浏览这些博客文章的人来说

使用 params,而不是 @params

为什么?当你使用 params 方法时,它允许在不破坏现有代码的情况下更改参数哈希的实现细节。如果 params 的实现发生变化,你就不必修改你的代码,因为参数的唯一访问点就是 params 方法。所以,幕后发生的事情的细节并不重要。然而,如果你直接使用 @params 实例变量,你就破坏了封装,从而也破坏了实现易于修改的能力。方法可以重构,但实例变量不能。今天,params 方法只是封装了 @params 实例变量,所以仍然使用 @params 可以工作,但这并不保证永远是这种情况。

同样适用于 requestresponsesessionheaderstemplatecookiesflash

基本上,一个好的经验法则是,除非是你*自己*创建的实例变量,否则不要在你的控制器或视图中使用实例变量。

甚至旧的布局中的 @content_for_layout 也被弃用,取而代之的是使用 yield。此外,content_for('some_fragment') 现在通过 yield :some_fragment 而不是 @content_for_some_fragment 来访问。