Включить пространство имен в представлениях HAML приложения пространства имен Rails 3.1 - PullRequest
0 голосов
/ 23 декабря 2011

Приложение 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 / handled_address.rb.

Мой route.rb выглядит так:

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

Путь к шаблону представления: app / views / aef / newman / handled_addresses / index.haml.haml

1 Ответ

1 голос
/ 02 января 2012

Во-первых, вы не должны использовать константы внутри шаблона. Установите некоторые переменные экземпляра или сделайте несколько помощников для этого.

Но, если вы действительно хотите получить доступ к своим пространственным именам констант (классы, модули и т. Д.), То в инициализаторе вы можете:

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

ActionView компилирует все шаблоны в этот модуль.

...