【发布时间】:2012-01-30 14:25:50
【问题描述】:
我想知道根据包含的模块在 ruby 中初始化类的最佳方法是什么。举个例子吧:
class BaseSearch
def initialize query, options
@page = options[:page]
#...
end
end
class EventSearch < BaseSearch
include Search::Geolocalisable
def initialize query, options
end
end
class GroupSearch < BaseSearch
include Search::Geolocalisable
def initialize query, options
end
end
module Search::Geolocalisable
extend ActiveSupport::Concern
included do
attr_accessor :where, :user_location #...
end
end
我不想要的是必须在每个包含 geolocalisable 模块的类上初始化 :where 和 :user_location 变量。
目前,我只是在我的模块中定义def geolocalisable?; true; end 之类的方法,然后,我在基类中初始化这些属性(由模块添加):
class BaseSearch
def initialize query, options
@page = options[:page]
#...
if geolocalisable?
@where = query[:where]
end
end
end
class EventSearch < BaseSearch
#...
def initialize query, options
#...
super query, options
end
end
有更好的解决方案吗?我希望如此!
【问题讨论】:
标签: ruby-on-rails ruby module initialization