【问题标题】:Include namespace in Rails 3.1 namespaced application's HAML views在 Rails 3.1 命名空间应用程序的 HAML 视图中包含命名空间
【发布时间】:2012-01-26 18:56:53
【问题描述】:

我的 Rails 3.1 应用程序完全在命名空间内实现。当我调用视图时,不包括这个命名空间,所以我每次都必须输入每个类的完整限定名。我想这是一个错误或至少是一个缺失的功能。如何在每个视图上下文中自动包含我的命名空间 Aef::Newman,这样我就不必每次都输入完整的限定名?

请注意,HAML 视图模板中的以下语句失败,因为找不到方法 include:

- include Aef::Newman

这个命名空间的两个组件都是模块类型。例如,我的控制器位于 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/handled_address.rb 中。

我的 routes.rb 看起来像这样:

resources :handled_addresses, controller: 'aef/newman/handled_addresses, only: :index

视图模板路径为app/views/aef/newman/handled_addresses/index.haml.haml

【问题讨论】:

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


    【解决方案1】:

    首先,您不应该在模板中使用常量。设置一些实例变量或让一些助手来做。

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

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

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

    【讨论】:

    • 您能否进一步解释为什么您认为在视图模板中使用常量是个坏主意?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2011-03-01
    相关资源
    最近更新 更多