我在Ruby on Rails中有多个需要共享类方法的Active Record数据模型。我可以轻松地在所有类中声明方法,但这违反了DRY原则。
我已经看过声明一个模块并使用'include'来混合代码,但这似乎只适用于实例方法,而不是类方法。
在Ruby / Rails中执行此操作的首选方法是什么? (我尝试创建一个基本的ActiveRecord类并从中继承,但ActiveRecord吓坏了。)
答案 0 :(得分:3)
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
答案 1 :(得分:2)
对模块使用extend
而不是include
。这将混合使用类方法而不是实例方法。
或者您绝对可以从ActiveRecord::Base
继承您的基本模型,并从此基础继承所有正常模型。 ActiveRecord不应该吓坏。