Включить пространство имен в представлениях HAML приложения пространства имен Rails 3.1
Приложение 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 ответ
Во-первых, вы не должны использовать константы внутри шаблона. Установите некоторые переменные экземпляра или сделайте несколько помощников, чтобы сделать это.
Но если вы действительно хотите получить доступ к своим пространственным именам констант (классы, модули и т. Д.), То в инициализаторе вы можете:
ActionView::CompiledTemplates.send :include, Aef::Newman
ActionView компилирует все шаблоны в этот модуль.