Devise是否在两个不同的引擎中支持两个具有相同名称的不同范围的模型?

时间:2014-10-14 01:16:03

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

我在一个应用程序中使用两个不同的rails可安装引擎。两个引擎都在使用设计,两者都有一个“用户”模型。 E.g。

module Module1
    class User < ActiveRecord::Base
        devise :database_authenticatable, :registerable,
            :recoverable, :rememberable, :trackable, :validatable
    end
end

module Module2
    class User < ActiveRecord::Base
        devise :database_authenticatable, :registerable,
            :recoverable, :rememberable, :trackable, :validatable
    end
end

我在两个引擎中设置了Devise配置范围

Devise.setup do |config|
    config.scoped_views = true
    config.default_scope = :module1_user
    config.router_name = :module1
    config.parent_controller = 'Module1::ApplicationController'
end

Devise.setup do |config|
    config.scoped_views = true
    config.default_scope = :module2_user
    config.router_name = :module2
    config.parent_controller = 'Module2::ApplicationController'
end

表中没有冲突,因为它们的范围正确:

module1_users
module2_users

此外,路线似乎是有序的 - 运行的rake路线显示每个引擎中都有Devise路线。

我已在其中一个引擎中覆盖了Devise视图 - module2,但不在module1中

问题是,引擎似乎发生冲突 - 登录到一个引擎登录两个引擎并签出两个引擎的标志。用户始终会重定向到module2登录页面。几个问题:

  1. 是否有设置强制Devise生成其辅助函数的范围版本?例如有一个:authenticate_<my_model>!函数。是否有可以产生:authenticate_<my_module>_<my_model>!功能的设置? (检查我的作用域控制器显示默认情况下辅助函数没有作用域 - 例如在rails控制台Module1::MyController.new.methods中仅产生:authenticate_user!,而不是:authenticate_module1_user!

  2. Devise是否支持这种设置?两个不同引擎中具有相同名称的两个不同范围的模型?

0 个答案:

没有答案