2012-02-07 97 views
3

我需要创建可重用的设计扩展。这是我第一次创造宝石。因此,根据其他设计扩展的来源,我已经开始创建文件devise_sms_authenticatable.rb“LIB”文件夹下面的代码:如何创建Devise扩展?

# encoding: utf-8 
unless defined?(Devise) 
    require 'devise' 
end 

Devise.add_module :sms_authenticatable, :model => 'devise_sms_authenticatable/model' 

另外,我创建的文件夹devise_sms_authenticatable在在'LIB'文件夹,并添加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

您是否介意发布指向您在问题中引用的其他Devise扩展源的链接? – craig 2013-11-23 15:05:36

回答

2

如果你把SmsAuthenticatable模块已经在Devise::Models,没有必要通过add_module添加它,虽然你可能需要需要它config/initializers/devise(如果你正在写一个宝石,你会避免这种情况,因为你不会在初始化器上触及devise.rb)。

你也可以写它没有制定::型号代码在你的宝石lib目录和只添加这行

Devise.add_module :sms_authenticatable, :model => 'sms_authenticatable' 

,并制定应该添加模块。

+0

太棒了!在** devise.rb **中添加**需要'devise_sms_authenticatable'**,并且一切正常!所以,直到我将它全部放入一个单独的宝石中才需要它? – tipugin 2012-02-08 04:02:34