2012-02-07 17 views
3

私は再利用可能なDevise拡張を作成する必要があります。これは宝石を作る私の最初の経験です。だから、他の工夫拡張子の源に従って、私は次のコードでファイル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

答えて

2

あなたはDevise::ModelsにすでにSmsAuthenticatableモジュールを入れている場合は、あなたが宝石を書いているならば、あなたはこれを回避することができる(config/initializers/deviseでそれを必要とする必要があるかもしれないから、、add_moduleを通してそれを追加する必要はありませんイニシャライザでdevise.rbに触れないでください)。

また::工夫することなく、あなたの宝石のlibディレクトリにモデルをそのコードを書くだけモジュールを追加する必要があります

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

そして工夫この行を追加することができます。

+0

素晴らしい!追加** ** devise_sms_authenticatable **が** devise.rb **に必要です。すべて動作します!だから、私はそれをすべて分離された宝石に入れるまで、それは必要なのですか? – tipugin

関連する問題