ruby-on-rails-3 – 应用控制器中的引擎路由
我的主应用程序的应用程序控制器中有一个before_filter钩子,它的作用如下:(它不只是在flash中放置一个链接,还有一个消息,但是与问题无关,它只是访问路由方法)
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的布局中,那么这个问题也会在那里产生. 解决方法
可安装引擎设计为这样工作,即隔离主应用程序路由和引擎路由.
如果您想要合并两组路由,则可以使用非隔离引擎.第一步是删除引擎定义中的isolation_namespace方法调用: module MyEngine class Engine < Rails::Engine isolate_namespace MyEngine # remove this line end end 第二步是在my_engine / config / routes.rb中转换你的路由,你应该从这开始: MyEngine::Engine.routes.draw do # stuff that routes things end 到这个: Rails.application.routes.draw do # stuff that routes things end 并删除应用程序路由中的安装方法调用: App::Application.routes.draw do mount MyEngine::Engine => "/engine" # remove this line end 这样做的主要优点是: >不需要猴子补丁栏.我知道设计这样做,但这可能是从引擎不存在的时代的一个剩下的轨道. 如果您正在寻找引擎的文档,那么rails docs for the Engine class是一个很好的起点.如果您对此主题感兴趣,我强烈建议您阅读它们(以防您尚未使用). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |