2012-02-07 87 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