我需要创建可重用的Devise扩展。这是我创建宝石的第一次经历。所以,根据其他Devise扩展的来源,我开始在'lib'文件夹中创建文件 devise_sms_authenticatable.rb ,其代码如下:
# encoding: utf-8
unless defined?(Devise)
require 'devise'
end
Devise.add_module :sms_authenticatable, :model => 'devise_sms_authenticatable/model'
此外,我在'lib'文件夹中创建了文件夹 devise_sms_authenticatable ,并添加了 model.rb ,代码为:
# encoding: utf-8
module Devise
module Models
module SmsAuthenticatable
# ...
end
end
end
毕竟我已将新扩展程序添加到用户模型。
class User << ActiveRecord::Base
devise ..., :sms_authenticatable
end
但是应用程序会出现错误uninitialized constant Devise::Models::SmsAuthenticatable (NameError)
。我做错了什么?
答案 0 :(得分:2)
如果您已将SmsAuthenticatable模块放在Devise::Models
上,则无需通过add_module
添加它,但您可能需要在config/initializers/devise
(如果您需要){重写一个宝石,你可以避免这种情况,因为你不会在初始化器上触摸devise.rb。
您也可以在gem lib目录中编写没有Devise :: Models的代码,只添加此行
Devise.add_module :sms_authenticatable, :model => 'sms_authenticatable'
并且Devise应该添加模块。