【发布时间】:2011-09-28 19:58:18
【问题描述】:
我的主应用程序的应用程序控制器中有一个 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"}
我了解,在引擎中,除非以 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)。 -
items_path 将在已构建的主应用程序中定义。我希望将引擎安装在某个地方,但集成到当前应用程序的布局中。引擎本身根本不会引用 items_path。我只想将引擎生成的视图放入应用程序布局的主体中。但是应用布局需要访问main_app的路由
-
这是因为需要让引擎和应用程序共享相同的布局。这样,当用户从主应用程序上的页面转到引擎上的页面时,布局之间没有明显的差异。
标签: ruby-on-rails-3 rails-routing rails-engines