Rails Engine не загружается в прекомпиляцию ресурса - PullRequest
1 голос
/ 12 марта 2012

У меня есть Rails Mountable Engine, который называется Blog.

Внутри модуля у меня есть метод с именем root_path. Модуль загружает корневой путь двигателя.

module Blog
  def self.root_path
    Engine.routes.url_helpers.root_path
  end
end

Внутри одного из активов javascript движка Rails я загружаю корневой URL движка, используя синтаксис erb. Как в следующей строке:

url = <%= Blog.root_path %>

Когда я запускаю rake assets:precompile внутри моего приложения, я получаю сообщение о том, что модуль не содержит такого метода. Как будто он не загружает библиотеку движка перед прекомпиляцией ресурсов.

Ошибка:

undefined method `root_path' for #< Module:0xc185e14>

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Несмотря на то, что ответ Райана был полезным, это не было причиной, по которой я получал ошибку.

Причина была в том, что я установил sep для initialize_on_precompile в false в моем config / application.rb, поэтому мое приложение не запускалось.

В направляющих Rails четко указано:

* Для более быстрой прекомпиляции ресурсов вы можете частично загрузить свое приложение, установив для config.assets.initialize_on_precompile значение false в config / application.rb, хотя в этом случае шаблоны не могут видеть объекты или методы приложения *

2 голосов
/ 12 марта 2012

Механизмы Rails предоставляют своих помощников по маршрутизации через прокси-сервер маршрутизации. Вам не нужно определять root_path методы, подобные этому.

Вместо этого вызовите метод, который является именем вашего движка, а затем помощник по маршрутизации на нем:

blog.root_path

Для получения дополнительной информации прочитайте Руководство по двигателям .

...