为什么在Rails中需要attr_accessor?

我偶尔会在模型代码中看到属性访问器/读者/编写器。 如果我希望能够从视图/控制器代码更新属性,这些是否必要?

我是初学者,所以我真的在谈论基本的应用程序。

attr_accessor是Ruby的核心function,用于使用getter和setter方法生成实例变量。 在基本的Ruby中从不需要它的使用(这是一种方便)。

对于ActiveRecord模型,ActiveRecord已经为您的数据列生成了getter和setter。 不需要或不需要attr_accessor

如果你有额外的实例数据,你不需要持久化(即它不是数据库列),那么你可以使用attr_accessor来保存几行代码。

类似命名的attr_accessible – 在Rails代码中经常出现并与attr_accessor混淆 – 是一种在ActiveRecord模型中控制质量分配的不推荐使用的方法。 Rails 4不支持开箱即用; 它已被强参数取代,这允许更精细的控制。

如果声明attr_accessor则可以将其用作virtual attribute ,该属性基本上是模型中未持久保存到数据库的属性。

示例案例:您在User模型中声明attr_accessor :password ,以便可以将其用作新用户表单中的字段。 在相应的create操作中收到密码时,可以派生hashed_password ,将其保存到数据库,并丢弃给定的password (在请求结束时自动完成)。

通常,在模型中装饰attr_accessor是一个非常好的主意,该模型不是SQL表中的实际列。 Rails 4与否。 这使您可以清楚地了解模型中的内容以及持久化的内容。