我在Ruby on Rails中有多个Active Record数据模型需要共享类方法。我可以轻松地在所有类中声明方法,但这违反了 DRY 原则。
我已经考虑过声明一个模块并使用"include"来混合代码,但这似乎仅适用于实例方法,而不适用于类方法。
在Ruby/Rails中执行此操作的首选方法是什么?(我试图创建一个基本的ActiveRecord类并从中继承,但ActiveRecord吓坏了)。
ClassMethods 习惯用法是模块同时提供类和实例方法的常用方法: http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/
如果您创建一个抽象基类,ActiveRecord 就不会惊慌失措,只要您在该类中调用self.abstract_class = true
:http://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html
使用extend
而不是模块include
。这将混合类方法而不是实例方法。
或者,您绝对可以从ActiveRecord::Base
继承您的基本模型,并从该基础继承所有正常模型。ActiveRecord不应该惊慌失措。