3

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

我看过声明一个模块并使用“包含”来混合代码,但这似乎只适用于实例方法,而不适用于类方法。

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

4

2 回答 2

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

于 2012-04-14T15:39:18.313 回答
2

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

或者您绝对可以从该基础继承您的基础模型ActiveRecord::Base并从该基础继承所有正常模型。ActiveRecord 不应该惊慌失措。

于 2012-04-14T15:31:11.903 回答