如何在Rails中的多个数据模型之间共享类方法?

时间:2012-04-14 15:25:23

标签: ruby-on-rails ruby

我在Ruby on Rails中有多个需要共享类方法的Active Record数据模型。我可以轻松地在所有类中声明方法,但这违反了DRY原则。

我已经看过声明一个模块并使用'include'来混合代码,但这似乎只适用于实例方法,而不是类方法。

在Ruby / Rails中执行此操作的首选方法是什么? (我尝试创建一个基本的ActiveRecord类并从中继承,但ActiveRecord吓坏了。)

2 个答案:

答案 0 :(得分:3)

ClassMethods习惯用法是模块提供类和实例方法的常用方法:http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

如果您创建一个抽象基类,ActiveRecord不应该吓到,只要您在该类中调用self.abstract_class = truehttp://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html

答案 1 :(得分:2)

对模块使用extend而不是include。这将混合使用类方法而不是实例方法。

或者您绝对可以从ActiveRecord::Base继承您的基本模型,并从此基础继承所有正常模型。 ActiveRecord不应该吓坏。