我经常在 #rubyonrails
通道看到有人在代码中使用 @params
。一段时间以来,@params
已被弃用,建议使用简单的 params
。对于那些只是略读博客文章的人们
params
,而不是 @params
为什么?当使用 params
方法时,它可以更改参数哈希的实现细节而无需中断现有代码。如果 params
的实现发生更改,则无需更改代码,因为参数的单一访问点仍然是 params
方法。因此,发生在后台的细节并不重要。然而,如果你直接使用 @params
实例变量,那么就破坏了封装,并因此破坏了轻松修改实现的能力。方法可以进行重构,但实例变量不能。今天,params
方法只是包装 @params
实例变量,因此仍然可以使用 @params
,但这并不能保证始终如此。
对于 request
、response
、session
、headers
、template
、cookies
和 flash
也是如此。
基本上,一个好的经验法则是,不要在控制器或视图中使用实例变量,除非是你创建了该实例变量。
甚至布局中的旧 @content_for_layout
也已弃用,建议只使用 yield
代替它。而且,现在通过 yield :some_fragment
访问 content_for(‘some_fragment’)
,而不是通过 @content_for_some_fragment
。