我偶尔会在模型代码中看到属性访问者/读者/编写者。如果我希望能够从视图/控制器代码更新属性,这些是否必要?
我是初学者,所以我真的在谈论基本的应用程序。
答案 0 :(得分:54)
attr_accessor
是Ruby的核心功能,用于使用getter和setter方法生成实例变量。在基本的Ruby中从不需要它的使用(这是一种方便)。
对于ActiveRecord模型,ActiveRecord已经为您的数据列生成了getter和setter。 1}}不是必需的,也不是理想的。
如果您有其他实例数据,则不需要保留(即它不是数据库列),然后您可以使用attr_accessor
来保存几行代码。
类似命名的attr_accessor
- 在Rails代码中经常出现并与attr_accessible
混淆 - 是一种在ActiveRecord模型中控制质量分配的弃用方法。 Rails 4不支持开箱即用;它已被强参数取代,它允许更细粒度的控制。
答案 1 :(得分:24)
如果您声明attr_accessor
,则可以将其用作virtual attribute
,这基本上是模型中未持久保存到数据库的属性。
示例案例:您在attr_accessor :password
模型中声明User
,以便将其用作新用户表单中的字段。当您在相应的create
操作中收到密码时,您可以派生hashed_password
,将其保留到数据库中,并丢弃给定的password
(这是在结束时自动完成的)请求)。
答案 2 :(得分:3)
通常,在模型中装饰attr_accessor
是非常好的主意,该模型不是SQL表中的实际列。 Rails 4与否。这使您可以清楚地了解模型中的内容和持久性。
答案 3 :(得分:0)
通常,我对不在模型/数据库中的属性使用attr_accessor
,但我认为没有必要使用它们。