我在我的主應用程序的應用程序控制器中有一個before_filter掛鉤,它執行類似以下操作:(它不只是在閃存中放置鏈接,但有一條消息,但它與的問題,它只是訪問方法的途徑)應用程序控制器中的引擎路由
class ApplicationController < ActionController::Base
before_filter :set_link
def set_link
flash[:notice] = items_path
end
end
這爲應用程序工作正常,但是當我進入控制器,用於發動機的我做我得到的異常
No route matches {:controller=>"items", :action=>"index"}
我明白當在引擎中時,路由助手是引擎的前綴,除非是前綴d與main_app
因此改變應用控制器的方法
def set_link
flash[:notice] = main_app.items_path
end
擺脫了異常,但我真的不希望有這樣做。是否有另一種解決方案讓引擎識別main_app路線?
編輯:
如果應用程序佈局調用路徑助手,也會發生這種情況。所以如果引擎被設計成集成到main_app的佈局中,那麼這個問題也會在那裏出現。
'main_app'有什麼問題?除此之外,爲什麼你從主應用程序在引擎中引入了一個依賴項,這樣你的引擎就依賴於在每個使用它的**應用程序中定義的items_path。這不是一個好習慣,通常你只應該使用'main_app.root_path'或其他一些衆所周知的路由(例如,如果你使用'sign_in_path')。 – Fabio
items_path將在已經構建的主應用程序中定義。我想將引擎安裝在某個位置,但集成到當前應用程序的佈局中。引擎本身從不引用items_path。 我只想將引擎生成的視圖放入應用程序佈局的主體中。但是,應用程序佈局需要訪問main_app的路線 – Olives
這需要讓引擎和應用程序共享相同的佈局。這樣當用戶從主應用程序中的頁面轉到引擎上的頁面時,佈局之間沒有明顯的區別。 – Olives