2013-12-12 45 views

回答

52

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

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

如果您有额外的实例数据,您不需要坚持(即它不是数据库列),那么您可以使用attr_accessor为自己节省几行代码。

类似命名的attr_accessible - 这在Rails代码中经常出现,并且与attr_accessor混淆 - 是一种控制ActiveRecord模型中批量分配的弃用方法。 Rails 4不支持开箱。它已被强参数替代,这可以实现更细粒度的控制。

24

如果声明attr_accessor,那么您可以将其用作virtual attribute,它基本上是模型上的一个属性,它不会持久保存到数据库。

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

3

通常,对于不是SQL表中实际列的模型上的任何内容,装饰attr_accessor是一个不错的主意。 Rails 4或没有。这让您清楚了解模型中的内容以及持续的内容。