我想制作一个由两个命名空间隔离的引擎。也就是说,例如,我想制作一个引擎,其类都存在于:
Car::BMW
因此,我的模型例如应该放在:
app/models/car/bmw/
我的表格应该以例如为前缀:
car_bmw_
我试图通过使用此代码来完成此操作lib/car/bmw/engine.rb
module Car
module BMW
class Engine < ::Rails::Engine
isolate_namespace Car::BMW # This will call: engine_name 'car_bmw'
end
end
end
但是,每当我生成模型时,使用此代码,模型都会放置在:
app/models/car
该表的前缀为:
car_
我究竟做错了什么?我正在使用的导轨版本是4.0.0.beta1
编辑
我在Rails::Generators::NamedBase
def namespaced_path
@namespaced_path ||= namespace.name.split("::").map {|m| m.underscore }[0]
end
如您所见,它只占用命名空间的第一部分。有人知道为什么吗?
这是 Rails 中的错误还是我不应该让我的类具有双重命名空间?
这是我用来修复发电机的快速破解方法。
require 'rails/generators'
Rails::Generators::NamedBase.class_eval do
protected
def namespaced_class_path
@namespaced_class_path ||= [namespaced_path.split('/')] + @class_path
end
def namespaced_path
@namespaced_path ||= namespace.name.split("::").map {|m| m.underscore }.join('/')
end
def class_name
([file_name]).map!{ |m| m.camelize }.join('::')
end
end