我需要使用attr_accessor吗?
在这段内容中,作者讨论了使用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的工作方式不兼容,解决方法是避免在模型对象中使用不需要持久化的临时字段,以避免混淆和复杂化模型对象。