【发布时间】:2013-05-15 16:21:51
【问题描述】:
我有以下设置:
app/models/my_module/service.rb
module MyModule
class Service < ActiveRecord::Base
def self.types
self.subclasses
end
def self.raw_types
self.types.map { |c| c.name.split("::").last }
end
end
end
require_dependency "my_module/service/rack"
require_dependency "my_module/service/rails"
require_dependency "my_module/service/sinatra"
app/models/my_module/service/rack.rb:
module MyModule
class Service::Rack < Service
end
end
app/models/my_module/service/rails.rb:
module MyModule
class Service::Rails < Service
end
end
app/models/my_module/service/sinatra.rb:
module MyModule
class Service::Sinatra < Service
end
end
到目前为止有效,但现在我的问题是:
为什么我必须添加这三行:
require_dependency "my_module/service/rack"
require_dependency "my_module/service/rails"
require_dependency "my_module/service/sinatra"
到我的 service.rb 文件?
如果我不添加这三行:
MyModule::Service.raw_types
=> []
如果我添加三行:
MyModule::Service.raw_types
=> ["Rack", "Rails", "Sinatra"]
有人有想法吗?
顺便说一句:我使用 Ruby 2.0.0-preview1、Rails 4.0.0.rc1 并使用
创建一个新的 Rails 引擎rails plugin new MyModule
【问题讨论】:
-
MyModule::Service.types 工作吗?
-
问题是为什么必须要求文件或为什么要填充数组?当您需要文件时,您添加 3 个类,它们都是 Service 的子类,因此
Service.subclasses返回这 3 个类。 -
想法:monkey-patches
subclasses到 Class 中的文件之一。 -
BettySt:仅当我需要父类中的文件时。 Kris:我的问题是为什么我必须 require 三个文件,而不是指向子类的方法调用自动需要我的文件,因为这些类是通过父类隐式调用的。用户:什么意思?我还没有定义任何猴子补丁。
标签: ruby-on-rails ruby ruby-on-rails-4