为什么在Rails中需要attr_accessor?

时间:2013-12-12 02:28:33

标签: ruby-on-rails ruby

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

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

4 个答案:

答案 0 :(得分:54)

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

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

如果您有其他实例数据,则不需要保留(即它不是数据库列),然后您可以使用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,但我认为没有必要使用它们。