2013-02-28 2 views
2

Rails 3.2.12 2/27/2013рельсы URL ссылки вспомогательные методы использования неопределёнными полные двигатели

У нас есть полный Рельсы двигатель называется base2_cms с моделью под названием "Event". Нет проблемы при запуске двигателя с использованием сервера rails.

Далее, еще один полный рельсы двигателя называется base2_cvb использованием base2_cms упакованы как вопрос gem.No в этом.

Далее приложение использует оба этих двигателя в качестве драгоценных камней. Мы это делали, так как впервые появились двигатели, но в последнее время многое изменилось. Где-то вдоль линии маршрутизация перестала работать. Или, я думаю, более точно, рельсы url связывают вспомогательные методы.

На уровне приложения, при использовании link_to со вторым параметром в качестве экземпляра события, эта ошибка возникает:

undefined method `event_path' for #<#<Class:0x007f82d52b3c20>:0x007f82d52a7240> 

трассировка стеки:

actionpack (3.2.11) lib/action_dispatch/routing/polymorphic_routes.rb:129:in `polymorphic_url' 

actionpack (3.2.11) lib/action_dispatch/routing/polymorphic_routes.rb:135:in `polymorphic_path' 

actionpack (3.2.11) lib/action_view/helpers/url_helper.rb:111:in `url_for' 

actionpack (3.2.11) lib/action_view/helpers/url_helper.rb:242:in `link_to' 

base2_cms (0.9.40) app/helpers/application_helper_fieldset.rb:31:in `fieldset_combined_title' 

base2_cms (0.9.40) app/helpers/application_helper_index.rb:35:in `index_start' 

base2_cms (0.9.40) app/views/organizations/index.html.erb:2:in 

Это конкретно не полиморфное связанное , так как у нас есть другие подобные проблемы, такие как получение этой ошибки в другом случае:

In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers 

Мы пробовали после этого последнего совета различными способами без успеха среди многих других попыток решения.

Запуск рек маршрутов на уровне приложений возвращает следующее относительно модели событий:

GET /events/:id/copy(.:format)     events#copy 
DELETE /events/:id/remove_organization(.:format) events#remove_organization 
POST /events/:id/add_organization(.:format)  events#add_organization 
GET /events(.:format)       events#index 
POST /events(.:format)       events#create 
GET /events/new(.:format)      events#new 
GET /events/:id/edit(.:format)     events#edit 
GET /events/:id(.:format)      events#show 
PUT /events/:id(.:format)      events#update 
DELETE /events/:id(.:format)      events#destroy 

С помощью консоли рельсы на последний уровень приложения, мы можем даже сделать это:

1.9.2-p320 :011 > app.event_path(9) 
=> "/events/9" 
1.9.2-p320 :012 > app.event_path(Event.find(88)) 
    Event Load (13.1ms) SELECT "events".* FROM "events" WHERE "events"."id" = $1 LIMIT 1  [["id", 88]] 
=> "/events/88" 

Но , при использовании link_to в представлении он не может найти метод event_path, как описано выше.

+0

У ваших драгоценных камней есть изолированное пространство имен? Как вы монтируете маршруты двигателя (оба base2_cms с base2_cvb и base2_cvb с MainApp)? Это может помочь, http://edgeapi.rubyonrails.org/classes/Rails/Engine.html#label-Using+Engine%27s+routes+outside+Engine – westonplatter

+0

попробуйте 'main_app.event_path' в ваших представлениях – NARKOZ

ответ

2

Когда вы используете двигатели, вы должны указать, если маршрут основного приложения или двигателя, если это от основного приложения вы можете сделать это с

main_app.event_path 

если это от base2_cms двигателя вы можете поставить

base2_cms.event_path 

или, если это из base2_cvb двигателя:

base2_cvb.event_path 

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

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