我正在尝试在我的 Rails 应用程序中使用 Devise 实现身份验证(Rails 2.3.8、Devise 1.0.7、在 Windows Vista 上运行的 mongrel)。但我收到以下错误:
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 变量没有包含在我的视图中,但我该怎么办?
您可以添加辅助方法ApplicationHelper
。确保使用正确的型号名称(在我的例子中是:user
代表着User
model).
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
And resource_name
别名为scope_name
以及。看devise_controller.rb https://github.com/plataformatec/devise/blob/master/app/controllers/devise_controller.rb#L36了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)