Ruby on rails 我需要使用attr_访问器吗?

Ruby on rails 我需要使用attr_访问器吗?,ruby-on-rails,attr-accessor,Ruby On Rails,Attr Accessor,我计划按照railscast中的描述使用条件验证,这是一个相当古老的版本,使用attr_accessor,请跳到视频的后面部分查看代码。我对rails编程比较陌生,希望了解attr_accessor的功能。这是关于如何使用它的问题,投票最多的回答是,它们几乎不应该在rails中使用 我是否有必要/应该像在railscast中那样使用attr_访问器?或者这些方法是自动创建的?在这种情况下使用attr\u访问器是否有危险?使用attr\u访问器与活动记录无关。我讨论了它是如何工作的,这也与AR有关

我计划按照railscast中的描述使用条件验证,这是一个相当古老的版本,使用attr_accessor,请跳到视频的后面部分查看代码。我对rails编程比较陌生,希望了解attr_accessor的功能。这是关于如何使用它的问题,投票最多的回答是,它们几乎不应该在rails中使用

我是否有必要/应该像在railscast中那样使用attr_访问器?或者这些方法是自动创建的?在这种情况下使用attr\u访问器是否有危险?

使用attr\u访问器与活动记录无关。我讨论了它是如何工作的,这也与AR有关

现在,AR所做的是,它自动创建自己的访问器方法,例如基于数据库模型的x/x=方法。这些自动创建的方法实际上只是用于代理内部AR工作的存根

关键是,attr_访问器自动包装简单的实例变量访问,而AR自动创建的方法包装AR magic。这两个操作是相互排斥的。因为attr_accessor没有链接到AR-magic,所以它可以用来创建不持久的临时字段:AR不知道或不关心实例变量

危险可能来自使用瞬态信息使模型对象复杂化——如果它是瞬态的,为什么它应该是模型对象的一部分?这是链接问题中投票最多的答案提出的论点

快乐编码

但是,我不知道如果对AR模型中的字段使用attr_访问器会发生什么。。。至少是混淆。

使用attr\u访问器与活动记录无关。我讨论了它是如何工作的,这也与AR有关

现在,AR所做的是,它自动创建自己的访问器方法,例如基于数据库模型的x/x=方法。这些自动创建的方法实际上只是用于代理内部AR工作的存根

关键是,attr_访问器自动包装简单的实例变量访问,而AR自动创建的方法包装AR magic。这两个操作是相互排斥的。因为attr_accessor没有链接到AR-magic,所以它可以用来创建不持久的临时字段:AR不知道或不关心实例变量

危险可能来自使用瞬态信息使模型对象复杂化——如果它是瞬态的,为什么它应该是模型对象的一部分?这是链接问题中投票最多的答案提出的论点

快乐编码


但是,我不知道如果对AR模型中的字段使用attr_访问器会发生什么。。。至少是混淆。

显示的attr\u accessor字段与链接答案中指出的数据库没有直接关系。它只是创建实例变量的getter/setter的快捷方式:也就是说,模型数据库不支持的其他瞬态位。在Ruby中,无法从实例外部[轻松]设置实例变量。投票最多的链接帖子认为,这种暂时性通常是不正确的,因为它不会持久化,因此不属于模型对象。然而,这并没有回答您提出的问题,这些问题似乎对attr_accessor的作用感到困惑:在链接的帖子中,@Peter说自动数据库支持的accessor是为您创建的。他的意思是说,当您创建存储在数据库中的属性时;是否自动为您创建访问者?我有点困惑。@John,是的。attr\u accessor用于非持久性属性。@pst,是的,我很好奇它的作用,尽管我认为我理解它是一个accessor方法,更重要的是,当它自动完成时。显示的attr\u accessor字段与链接答案中指出的数据库没有直接关系。它只是创建实例变量的getter/setter的快捷方式:也就是说,模型数据库不支持的其他瞬态位。在Ruby中,无法从实例外部[轻松]设置实例变量。投票最多的链接帖子认为,这种暂时性通常是不正确的,因为它不会持久化,因此不属于模型对象。然而,这并没有回答您提出的问题,这些问题似乎对attr_accessor的作用感到困惑:在链接的帖子中,@Peter说自动数据库支持的accessor是为您创建的。他的意思是说,当您创建存储在数据库中的属性时;是否自动为您创建访问者?我有点困惑。@John,是的。attr_accessor用于非持久属性。@pst,是的,我很好奇它的作用,尽管我认为我理解它是一个访问器方法,更重要的是,当它自动完成时。