【问题标题】:How do you use regular routes over engine routes您如何在引擎路线上使用常规路线
【发布时间】:2015-02-04 18:16:21
【问题描述】:

我有一个安装引擎的 rails 应用程序,使用引擎路由 ID 做 engine_name.route_name_from_said_engine_path 并使用常规应用程序路由我会做 route_name_path。虽然这适用于未经测试的代码,但我第二次运行测试时,测试失败,因为应用程序路由“不存在”。

我的路线申请文件:

AisisPlatform::Application.routes.draw do

  resources :application_api_keys

  root :to => 'home#home'

  get 'whats_is_aisis_platform' => 'marketing#platform', :as => 'platform'
  get 'using_aisis_platform' => 'marketing#using_platform', :as => 'using_platform'
  get 'data_syncing' => 'marketing#data_syncing', :as => 'data_syncing'
  get 'help_center' => 'help#help_center', :as => 'help_center'

  mount Xaaron::Engine => ""
end

我的一个测试,水豚测试,失败了,因为:

Roles Delete role should delete a role (flash)
     Failure/Error: visit xaaron.roles_path
     ActionView::Template::Error:
       undefined local variable or method `application_api_keys_path' for #<#<Class:0x007f80cb84cb48>:0x007f80c65b86c0>
     # ./app/views/layouts/xaaron/application.html.erb:42:in `_app_views_layouts_xaaron_application_html_erb__814247150210445120_70095544064680'
     ...

因此,每个测试都失败了,但是我可以启动应用程序并去访问这条路线,它工作得很好。

xaaron/application.html.erb 上的这条特定路线如下所示:

        <ul class="dropdown-menu">
          <li><%= link_to 'Users', xaaron.users_path %></li>
          <li><%= link_to 'Group Management', xaaron.groups_path %></li>
          <li><%= link_to 'Role Management', xaaron.roles_path %></li>
          <li><%= link_to 'Permission Management', xaaron.permissions_path %></li>
          <li class="divider"></li>
          <li><%= link_to 'Application Api Key Management', application_api_keys_path %></li>
        </ul>

我的测试失败是因为:

<li><%= link_to 'Application Api Key Management', application_api_keys_path %></li>

在使用应用程序路由而不是引擎路由时,我应该做些什么特别的事情?

【问题讨论】:

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


    【解决方案1】:

    在我看来不像,但如果布局文件在引擎中,则需要使用main_app.route_path。还有一点需要注意:

    “应用程序不知道如何将这些请求路由到引擎,除非您明确告诉它如何。为此,您必须将 @routes 实例变量设置为设置代码中设置的引擎路由:”

    module Blorgh
      class FooControllerTest < ActionController::TestCase
        setup do
          @routes = Engine.routes
        end
    
        def test_index
          get :index
          ...
        end
      end
    end
    

    来源:http://guides.rubyonrails.org/engines.html#testing-an-engine。不确定这是否是您的问题,但可以随时尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多