Правильный путь
Я считаю, что лучшим решением является вызов new_post_path
на прокси-сервере маршрутов Engine, который доступен в качестве вспомогательного метода. В вашем случае вспомогательный метод по умолчанию будет basic_app_engine
, поэтому вы можете вызывать basic_app_engine.new_post_path
в своих представлениях или помощниках.
Если хотите, вы можете установить имя одним из двух способов.
# in engine/lib/basic_app/engine.rb:
module BasicApp
class Engine < ::Rails::Engine
engine_name 'basic'
end
end
или
# in app/config/routes.rb:
mount BasicApp::Engine => '/app', :as => 'basic'
В любом случае, вы могли бы затем вызвать basic.new_posts_path
в ваших взглядах или помощниках.
Другой способ
Другой вариант - не использовать установленный движок, а вместо этого заставить движок добавлять маршруты непосредственно в приложение. Thoughtbot HighVoltage делает это. Мне не нравится это решение, потому что оно может вызвать конфликты пространства имен, когда вы добавляете много движков, но оно работает.
# in engine/config/routes.rb
Rails.application.routes.draw do
resources :posts, :path => '' do
resources :post_comments
resources :post_images
end
end
# in app/config/routes.rb:
# (no mention of the engine)