我打算按照此railscast中描述的方式使用条件验证。在railscast中,使用attr_accessor相当旧,(跳到视频的后面部分查看代码)。我对rails编程比较陌生,想要了解attr_accessor的作用。这个post询问使用它,最受欢迎的答案说它们几乎不应该用在轨道上。
是否有必要/我应该像在railscast中一样使用attr_accessor吗?或者这些方法是自动创建的?在这种情况下使用attr_accessor有危险吗?
答案 0 :(得分:4)
使用attr_accessor
与Active Record无关。我在this post讨论它是如何工作的,这也与AR有关。
现在,AR 做做了什么,是否会根据数据库模型自动创建自己的“访问者”方法(例如x/x=
)。这些自动创建的方法实际上只是用于代理内部AR工作的存根。
重点是,attr_accessor
(自动)包装简单的实例变量访问,而AR(自动)创建的方法包装AR魔术。这两项业务是互相排斥的。因为attr_accessor
没有“链接”到AR魔法,所以它可以用于创建不持久的瞬态字段:AR不知道或不关心实例变量。
“危险”来自于可能使模型对象与瞬态信息复杂化 - 如果它是瞬态的,为什么它应该成为模型对象的一部分?这是最多投票的论点在链接问题中回答。
快乐的编码。
但是,我不知道如果将attr_accessor
用于与AR模型中恰好相同的字段时会发生什么......至少是混乱。