2017-02-25 50 views
0

我想看看是否有可能增加一些更加“神奇”的方法来ActiveRecord::Base。例如,默认情况下,我们提供了诸如[attribute]_changed?[attribute]_was方法的方法。我想钩到ActiveRecord的,这样我可以访问属性名和动态添加[attribute]?别名[attribute]_at?属性。修补ActiveRecord的动态,基于属性的方法添加到所有型号

任何指针将不胜感激!

谢谢

+0

我在考虑更多其他timestamp属性 - 所以'scheduled?'会是'scheduled_at?'的别名......我想这只会对允许为零的属性有用。 –

回答

0

我建议你不要“修补”活动记录。只需在您的模型中定义您需要的便利方法即可。当您提出一个动态的解决方案可能会提供一些理论上的未来便利(例如没有指定在未来更多的方法),这将是一个有点贸易的容易脱落可读/可维护的代码之间。

如果要牺牲可读性为这种便利,并且行为将适用于多种类型,那么你可以实现一个模块/库,并在您的模型。例如,该模块可能位于模型关注目录中。

另一种方法是创建一个模型继承的基类,继而它继承自ActiveRecord::Base。如果你选择了一个动态的解决方案,我仍然建议你以这样的方式实施,这显然是你在做什么。隐藏任何非常规的实现对于将来试图理解你的代码的人来说都是一种痛苦。

棒众所周知的惯例并在便利优先可读性。提示你如何实现一个动态的解决方案在于你可以使用元编程Google

这个答案显然很有见地,但我希望它提供了一些好的食物!

相关问题