【发布时间】:2013-04-18 16:11:28
【问题描述】:
我想制作一个由两个命名空间隔离的引擎。也就是说,比如说我想制作一个引擎,它的类都在里面:
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_
我做错了什么?我使用的rails版本是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
【问题讨论】:
标签: ruby-on-rails rails-engines ruby-on-rails-4