我有模型Gateway
和GatewayType
一個範圍,我找定義在運行時
Gateway.<gateway_type.name> # => Gateway.where(:gateway_type_id => gateway_type.id)
現在這個<gateway_type.name>
範圍應在運行時生成,類似於在運行時添加類/實例級別的方法使用defined_method像下面
class Object
def metaclass
class << self
self
end
end
end
# adding class level methods
GatewayType.all.each do |type|
# adding methods to Gateway
Gateway.metaclass.class_eval do
define_method "all_#{type.name}" do
Gateway.where(:gateway_type_id => type.id)
end
end
end
我不想去與上面的方法,因爲它不會讓我在where
或其他範圍之間添加all_xyzs
像
Gateway.scope1.all_xyzs.scope2
那麼......有沒有辦法在運行時定義scope
?
你是對的,但仍然是原因,1)我想知道我們是否可以在運行時添加範圍,2)我希望看到類似「Gateway.scope1.xyzs.scope2」的代碼。 –
是的,您可以在運行時添加範圍。只需調用類'scope'方法,你想一個範圍增加。 –