如何使用引擎为2个模型设置设计

时间:2018-06-12 02:52:01

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

我在使用引擎正确设置Devise方面遇到了一些麻烦。

在我的引擎中,我有:

config/initializers/devise.rb

config.router_name = :portal_core

config/routes.rb

devise_for :users, class_name: 'PortalCore::User', module: :devise

app/models/portal_core/user.rb

module PortalCore
  class User < ApplicationRecord
    ...
    devise :database_authenticatable, :trackable, :confirmable,
         :recoverable, :rememberable, :validatable, :lockable
  end
end

我所有的测试都在这里通过。 然后,在我的主机应用程序之一中:

config/routes.rb

devise_for :admin_users, class_name: 'AdminUser'

app/models/admin_user.rb

  class User < ApplicationRecord
    ...
    devise :database_authenticatable, :trackable,
     :recoverable, :rememberable, :validatable
  end

当我在主机应用程序中运行此测试时:

context "When not logged in" do
  it "redirect to new user session when try to access index" do
    process :index, method: :get, params:{}
    expect(response).to redirect_to(new_admin_user_session_path)
  end
end

我收到此错误: NoMethodError:        未定义的方法`portal_core&#39; for #Devise :: FailureApp:0x0000000008c9f1f0&gt;

如果我在主机应用程序中安装引擎路由:

mount PortalCore::Engine => '/portal_core'

然后我收到了这个错误:预期的响应是重定向到http://test.host/admin_users/sign_in,但重定向到http://test.host/

如果我尝试启动服务器,它会继续使用 401 Unauthorized重定向

可能缺少一些配置,但我无法弄清楚是什么。

1 个答案:

答案 0 :(得分:0)

所以,我不知道这是解决方案还是只是解决方法。

在主机app设计初始化程序中,我将router_name设置为nil: config.router_name = nil 它起作用了。

欢迎任何其他解决方案!

谢谢!