2010-12-27 14 views
17

私はRailsアプリケーション(Windows Vista上で動作するRails 2.3.8、Devise 1.0.7、mongrel)でDeviseで認証を実装しようとしています。しかし、次のエラーが表示されます。devise_mapping変数は何ですか?どのように組み込むことができますか?

undefined local variable or method `devise_mapping' for #<ActionView::Base:0x6d63890> 

これは、自動生成の部分_devise_links.htmlを使用している場合です。

<%- if controller_name != 'sessions' %> 
    <%= link_to t('devise.sessions.link'), new_session_path(resource_name) %><br /> 
<% end -%> 

<%- if devise_mapping.registerable? && controller_name != 'registrations' %> 
    <%= link_to t('devise.registrations.link'), new_registration_path(resource_name) %><br /> 
<% end -%> 

<%- if devise_mapping.recoverable? && controller_name != 'passwords' %> 
    <%= link_to t('devise.passwords.link'), new_password_path(resource_name) %><br /> 
<% end -%> 

<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> 
    <%= link_to t('devise.confirmations.link'), new_confirmation_path(resource_name) %><br /> 
<% end -%> 

<%- if devise_mapping.lockable? && controller_name != 'unlocks' %> 
    <%= link_to t('devise.unlocks.link'), new_unlock_path(resource_name) %><br /> 
<% end -%> 

これを修正する方法については、私は、devise_mapping変数が私のビューに含まれていないと仮定していますが、私はそれについて何をしますか?

答えて

5

を見ます私はあなたがなぜその部分をレンダリングできないのかを考え出したと思います。レンダリングしようとしている部分は、sign_in/sign_up形式の下に表示されるリンクの部分です。

これらのリンクをアプリケーションに追加する場合は、this page on the Devise Wikiに方法を示し、独自の部分を作成する必要があります。

-1

routes.rbファイルにdevise_forコールがありますか?

たとえば、あなたはUserクラスのためにそれを使用している場合、ルートは次のようになります。

devise_for:ユーザー

詳細は

が、私はこの質問は親切で実現https://github.com/plataformatec/devise

+0

申し訳ありません。 – courtsimas

1

devise_mappingの代わりに、Devise.mappings[:user]を使用できます。問題のユーザークラスはUserです。

+0

素敵な、ありがとう! – Laser

40

ApplicationHelperにヘルパーメソッドを追加できます。適切なモデル名を使用してください(私の場合、Userモデルを表す:userです)。

def devise_mapping 
    Devise.mappings[:user] 
end 

def resource_name 
    devise_mapping.name 
end 

def resource_class 
    devise_mapping.to 
end 

アップデート2014年1月28日

工夫のmasterブランチがdevise_mappingが今要求に格納されていることを示しています

# Attempt to find the mapped route for devise based on request path 
def devise_mapping 
    @devise_mapping ||= request.env["devise.mapping"] 
end 

そしてresource_nameも同様scope_nameとしてエイリアスされます。詳細は、devise_controller.rbを参照してください。

+0

機能はありません更新。私は前頭括約筋を閉鎖した。 – juliangonzalez

関連する問題