我需要使用attr_accessor吗?

7 浏览
0 Comments

我需要使用attr_accessor吗?

我计划按照这个railscast中描述的方式使用条件验证。在这个相对较旧的railscast中,使用了 attr_accessor(跳到视频的后半部分查看代码)。作为一个相对新手的Rails程序员,我想了解一下 attr_accessor 的作用。这个帖子询问了它的使用情况,得到的最多赞的答案说在Rails中几乎不应该使用它。

在这个railscast中是否有必要/我是否应该像使用 attr_accessor 一样使用它?或者这些方法是自动创建的?在这种情况下使用 attr_accessor 是否存在任何风险?

0
0 Comments

在这段内容中,作者讨论了使用attr_accessor的原因以及它与Active Record的关系。作者指出,attr_accessor与Active Record无关,它是用来自动创建简单实例变量的访问器方法的。而Active Record则是根据数据库模型自动创建自己的访问器方法,这些方法实际上只是用来代理到内部Active Record操作的存根。

作者强调了attr_accessor和Active Record自动生成的方法之间的区别,它们是相互排斥的。因为attr_accessor不能与Active Record的魔法进行关联,它只能用于创建不被持久化的临时字段,而Active Record并不知道或关心实例变量。

作者指出,使用attr_accessor的危险在于可能会给模型对象增加不需要持久化的临时信息,如果这些信息是临时的,那为什么要将它们作为模型对象的一部分呢?

作者最后提到了一个问题,就是如果在AR模型中同时使用attr_accessor和数据库中已存在的字段会发生什么,至少会引起混淆。

使用attr_accessor的问题在于它与Active Record的工作方式不兼容,解决方法是避免在模型对象中使用不需要持久化的临时字段,以避免混淆和复杂化模型对象。

0