在Rails 3.1命名空间应用程序的HAML视图中包含命名空间

时间:2011-12-23 11:40:07

标签: namespaces ruby-on-rails-3.1 haml

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

1 个答案:

答案 0 :(得分:1)

首先,你不应该在模板中使用常量。设置一些实例变量或者做一些帮助来完成它。

但是,如果你真的想要访问你的命名空间常量(类,模块等),那么在初始化程序中你可以:

ActionView::CompiledTemplates.send :include, Aef::Newman

ActionView将所有模板编译到此模块中。