My Rails 3.1应用程序完全在命名空间内实现。当我调用视图时,不包含此命名空间,因此每次都必须键入每个类的完全限定名称。我想这是一个错误或至少是一个缺失的功能。如何在每个视图上下文中自动包含我的命名空间Aef :: Newman,这样我每次都不必输入完整的限定名称?
请注意,HAML视图模板中的以下语句失败,因为找不到方法include:
- include Aef::Newman
此命名空间的两个组件都是Module类型。例如,我的控制器位于app / controllers / aef / newman中,应用程序控制器如下所示:
module Aef
module Newman
class ApplicationController < ActionController::Base
protect_from_forgery
end
end
end
有一个名为HandledAddressesController的控制器,如下所示:
module Aef
module Newman
class HandledAddressesController < ApplicationController
def index
@handled_addresses = HandledAddress.all
end
end
end
end
请注意,即使是HandledAddress模型实际上名为Aef :: Newman :: HandledAddress,也位于app / models / aef / newman / processed_address.rb中。
我的routes.rb看起来像这样:
resources :handled_addresses, controller: 'aef/newman/handled_addresses, only: :index
视图模板路径为app / views / aef / newman / processed_addresses / index.haml.haml
答案 0 :(得分:1)
首先,你不应该在模板中使用常量。设置一些实例变量或者做一些帮助来完成它。
但是,如果你真的想要访问你的命名空间常量(类,模块等),那么在初始化程序中你可以:
ActionView::CompiledTemplates.send :include, Aef::Newman
ActionView将所有模板编译到此模块中。