2013-05-01 1 views
1

Основное приложение - это контейнер для нескольких двигателей. Одним из основных движков является приложение «приборной панели», которое будет предоставлять статистику, отчеты и т. Д. Из различных других движков. При рендеринге части других движков в панели управления я не могу получить доступ к маршрутам исходного движка.Рельсы Двигатель частично в другом двигателе не может получить доступ к маршрутам оригинального двигателя

Использование теста двигатель в качестве примера, он у меня и Dashboard двигатель, установленный следующим образом в route.rb файле моего главного приложения:

mount Test::Engine, :at => "/test", :as => "test" 
mount Dashboard::Engine, :at => "/dashboard", :as => "dashboard" 

В моем тесте двигатель у меня есть виджет в частичное что Я хочу использовать на приборной панели. В связи с панели мониторинга у меня есть:

<%= render :partial => "test/dashboard/test" %> 

Виджет частичный код показывает вверх отлично и очень простой:

<h3>Test</h3> 

Однако, если добавить что-то пытается получить доступ к одному из маршрутов Test, таких как:

<%= link_to "Root", test.root_path %> 

Я получаю следующее сообщение об ошибке о том, что тест является ноль:

не определен метод «root_path» для ноль: NilClass

Если я двигаю link_to из виджета просмотра панели, он прекрасно работает. Если я удалю «тест» из link_to в виджет, чтобы рассматривать его как обычный именованный маршрут в движке, он будет ссылаться на корневой путь механизма Dashboard; а не тестовым двигателем.

Любые идеи о том, как я могу предотвратить это и получить доступ к маршрутам тестового движка в виджетах, отображаемых в представлении панели мониторинга? Я хочу попытаться сохранить виджеты каждого модуля модульными и содержаться внутри движка, поэтому, если основное приложение решит не использовать движок, приборная панель не должна беспокоиться о слишком большом постороннем коде.

ответ

2

После долгих размышлений я наконец понял, что частичное имя нельзя назвать таким же, как то, к чему движется двигатель в основном приложении. Переименовав partial в _test_widget.html.erb, ошибка NilClass уходит, поскольку в именах нет конфликта.

+1

Теперь вопрос в том, почему? – mathieugagne

Смежные вопросы