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