2010-12-27 2 views
17

Я пытаюсь реализовать аутентификацию с помощью Devise в моем приложении Rails (Rails 2.3.8, Devise 1.0.7, mongrel работает в Windows Vista). Но я получаю следующее сообщение об ошибке:Что такое переменная 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

У вас есть вызов devise_for в файле routes.rb?

Например, если вы используете его для своего класса User, то маршрут будет:

devise_for: пользователи

для получения дополнительной информации см https://github.com/plataformatec/devise

+0

хорошо плохой ответ думаю. – courtsimas

1

Вместо использования devise_mapping вы можете использовать Devise.mappings[: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 

Обновление 1/28/2014

Мастер филиал Devise показывает, что 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

No me funciono el Обновление. Me quedo con el anterior. – juliangonzalez

Смежные вопросы