我想知道什麼是根據包含的模塊初始化ruby中的類的最佳方法。我給大家舉一個例子:根據包含的模塊初始化一個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
模塊上的每個類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
是否有更好的解決方案?但願如此!
我會嘗試,但是你知道它是否以同樣的方式使用ActiveSupport時: :關心?在這種情況下,我並不認爲所包含的模塊幾乎像您的示例中那樣充當超類。 – Robin 2011-12-30 22:35:59
好吧,它的工作原理完全相同,而且您的解決方案是我一直在尋找的,謝謝。我在搜索時學到的隨機事物:調用'super()'與'super'不同。邏輯但仍然^^。 – Robin 2011-12-30 23:09:14