我在一个应用程序中使用两个不同的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登录页面。几个问题:
是否有设置强制Devise生成其辅助函数的范围版本?例如有一个:authenticate_<my_model>!
函数。是否有可以产生:authenticate_<my_module>_<my_model>!
功能的设置? (检查我的作用域控制器显示默认情况下辅助函数没有作用域 - 例如在rails控制台Module1::MyController.new.methods
中仅产生:authenticate_user!
,而不是:authenticate_module1_user!
)
Devise是否支持这种设置?两个不同引擎中具有相同名称的两个不同范围的模型?