2010-12-27 17 views
17

Próbuję wprowadzić uwierzytelnianie z Devise w mojej aplikacji Rails (Rails 2.3.8, Devise 1.0.7, kundel działający pod Windows Vista). Ale ja otrzymuję następujący błąd:co to jest zmienna devise_mapping i jak ją uwzględnić?

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

To kiedy mogę używać automatycznie wygenerowane częściowe _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 -%> 

Wszelkie pomysły na rozwiązanie tego problemu? Zakładam, że zmienna devise_mapping nie jest uwzględniana w moich widokach, ale co mam z tym zrobić?

Odpowiedz

5

uświadamiam sobie to pytanie jest rodzaj starego, ale myślę, że zrozumiałem, dlaczego nie można po prostu oddać tego cząstkowego. Część, którą próbujesz renderować, jest częściowa dla linków wyświetlanych poniżej formularza sign_in/sign_up.

Jeśli chcesz dodać te linki do swojej aplikacji, this page on the Devise Wiki pokaże Ci, jak to zrobić, i wymaga utworzenia własnych części.

1

Zamiast używać devise_mapping, można użyć Devise.mappings[:user], ponieważ klasa użytkownika to Użytkownik.

+0

Cudownie, dzięki! – Laser

40

Możesz dodać metody pomocnicze do ApplicationHelper. Upewnij się, że używasz właściwej nazwy modelu (w moim przypadku jest to :user reprezentująca model User).

def devise_mapping 
    Devise.mappings[:user] 
end 

def resource_name 
    devise_mapping.name 
end 

def resource_class 
    devise_mapping.to 
end 

Aktualizacja 1/28/2014

Oddział mistrz opracować pokazuje, że devise_mapping jest obecnie przechowywane w zgłoszeniu:

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

I resource_name jest aliasem jako scope_name również. Aby uzyskać więcej informacji, patrz devise_controller.rb.

+0

Brak funkcji aktualizacji. Me quedo con el anterior. – juliangonzalez