如果不添加引擎前缀,则Rails引擎路由不起作用

时间:2017-02-27 16:05:23

标签: ruby-on-rails ruby ruby-on-rails-5 rails-engines

我的导轨应用程序中安装了一个引擎:

mount Blazer::Engine, at: "blazer"

现在,这个获取请求:

<%= link_to "New Query", new_query_path, class: "btn btn-info" %>

重定向到此:

blazer/assets?action=new&controller=blazer%2Fqueries

而不是

blazer/queries/new

如果我覆盖blazer引擎查询视图并添加

blazer.new_query_path

它的前缀,它会工作正常,但没有它不工作,即使它工作之前我将我的dev分支重新定位到这个。

因为提交太多,所以很难找到问题所在。有没有人知道为什么会突然发生这种情况?

4 个答案:

答案 0 :(得分:1)

在您的主应用程序中简单地创建普通控制器.....如下所示

创建欢迎控制器。在该控制器中添加

class WelcomeController<ActionController

  def index
       redirect_to '/blazer'
  end

end

在您的路线上。 rb文件

 Add root  'welcome#index'

 mount Blazer::Engine => '/blazer'

就是这样,您的引擎现在可以正常运行了

快乐编码

答案 1 :(得分:0)

解决方案是从include Rails.application.routes.url_helpers中删除module ApplicationHelper。感谢以上https://stackoverflow.com/users/3210742/rogue的评论 Rails Engine routes do not work without adding the engine prefix

答案 2 :(得分:0)

您需要像这样在您的应用程序中使用Blazer::ApplicationController

# config/initializers/blazer.rb

module Blazer
  class ApplicationController < ActionController::Base; end
end

答案 3 :(得分:-1)

您需要在root_path

处安装引擎
mount Blazer::Engine, at: '/'

您可以通过在engine.rb中指定以下代码来自动安装引擎

initializer 'blazer', before: :load_config_initializers do
  Rails.application.routes.append do
    mount Blazer::Engine => '/'
  end
end

如果引擎和主机应用程序具有相同的路由,则访问主机路由

main_app.route_path