在rails 4中,我有以下的装饰器代码。这是很好的工作
app/decorators/models/user_decorator.rb
User.class_eval do
devise :omniauthable
end
现在我把rails升级到第5版。但它给我的错误
将omniauth_callbacks映射到不可全真资源上,请添加
devise :omniauthable
至User
模型
我所有的模型都在单独的 gem 中,而我没有在该 gem 中安装 devise。这就是为什么我使用上述装饰器在我的应用程序中添加devise。我如何在rails-5中实现同样的功能?
试着用Concern来装饰用户模型,devise :omniauthable。从你提供的背景来看,class_eval不工作的原因并不明显。这可能与rails内部的魔法有关,因为从rails 4到5,内部的魔法可能已经发生了变化,所以使用Concern来为Model添加行为的 "rails方式 "可能会解决你的问题。
module OmniauthableUser
extend ActiveSupport::Concern
included do
devise :omniauthable
end
end
app/decorators/models/user_decorator.rb
User.include OmniauthableUser