加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 应用控制器中的引擎路由

发布时间:2020-12-16 19:47:55 所属栏目:百科 来源:网络整理
导读:我的主应用程序的应用程序控制器中有一个before_filter钩子,它的作用如下:(它不只是在flash中放置一个链接,还有一个消息,但是与问题无关,它只是访问路由方法) class ApplicationController ActionController::Base before_filter :set_link def set_link fl
我的主应用程序的应用程序控制器中有一个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是一个很好的起点.如果您对此主题感兴趣,我强烈建议您阅读它们(以防您尚未使用).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读