我的一个名为global_list的类正在过度生长,我想将它分解为一个名为GlobalListAggregate的模块。我想使用一组find_by_sql方法(是的,我稍后会重构)但需要先将它们移出global_list。
我喜欢类似的东西(显然sql查询要比这复杂得多):
module GlobalListAggregate < ActiveRecord::Base
def self.get_users
sql="select * from users"
users=find_by_sql([sql])
end
end
但是模块不能以这种方式扩展。我怎么能做到这一点?
THX
答案 0 :(得分:0)
Rails中流行的模式是“关注点”,它基本上是扩展ActiveSupport::Concern的模块,它为这类事物添加了一些语法糖(特别是在扩展类上定义类方法)更容易一些。该链接的文档以及the answers to this SO question非常有启发性。
答案 1 :(得分:0)
我还没有真正理解关注,所以另一个答案可能是最好的,但我会说,如果我理解你的目标,你应该能够做到:
module GlobalListAggregate
def get_users
sql="select * from users"
users=find_by_sql([sql])
end
end
然后在extend GlobalListAggregate
课程中添加GlobalList
。
答案 2 :(得分:0)
假设你的用法是这样的
GlobalListAggregate.get_users.each { |user| puts user.id }
这有点作弊,不确定如果我推荐它
module GlobalListAggregate
def self.klass
User
end
def self.get_users
sql="select * from users"
klass.find_by_sql([sql])
end
end