如何创建Devise扩展?

时间:2012-02-07 20:26:02

标签: ruby-on-rails devise

我需要创建可重用的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)。我做错了什么?

1 个答案:

答案 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应该添加模块。