Ruby on rails 修补ActiveRecord以向所有模型添加动态的、基于属性的方法

Ruby on rails 修补ActiveRecord以向所有模型添加动态的、基于属性的方法,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我想看看是否有可能在ActiveRecord::Base中添加更多的“神奇”方法。例如,默认情况下,我们得到的方法是[attribute]\u changed?和[attribute]\u是方法。我想挂接到ActiveRecord,这样我就可以访问属性名称并在属性处动态添加[attribute]?别名 任何指点都将不胜感激 谢谢我建议您不要“修补”活动记录。只需在模型中定义所需的方便方法。虽然您提出的动态解决方案可能会在理论上为将来提供一些便利(例如,将来不必指定其他方法),但它将在易于阅读/维

我想看看是否有可能在
ActiveRecord::Base
中添加更多的“神奇”方法。例如,默认情况下,我们得到的方法是
[attribute]\u changed?
[attribute]\u是
方法。我想挂接到ActiveRecord,这样我就可以访问属性名称并在属性处动态添加
[attribute]?
别名

任何指点都将不胜感激

谢谢

我建议您不要“修补”活动记录。只需在模型中定义所需的方便方法。虽然您提出的动态解决方案可能会在理论上为将来提供一些便利(例如,将来不必指定其他方法),但它将在易于阅读/维护的代码之间进行一些权衡

如果您想为了方便而牺牲可读性,并且该行为将应用于多个类,那么您可以将其实现为一个模块/库,并包含在您的模型中。例如,此模块可能位于模型关注点目录中

另一种方法是创建一个基类,您的模型继承自该基类,而该基类又继承自
ActiveRecord::base
。如果您选择动态解决方案,我仍然建议您以一种显而易见的方式实现。隐藏任何非传统的实现对于将来试图理解您的代码的任何人来说都是一件痛苦的事情

坚持众所周知的惯例,将可读性置于方便性之上。关于如何实现动态解决方案的提示在于元编程,您可以


这个答案显然很固执己见,但我希望它能提供一些思考的好东西

我在考虑其他时间戳属性——因此
scheduled?
将是
scheduled\u at?
的别名。。。我想它只对允许为零的属性有用。