17

我正在尝试在Rails应用程序中使用Devise实现身份验证(Rails 2.3.8,Devise 1.0.7,mongrel在Windows Vista上运行)。但我得到以下错误:

#<ActionView::Base:0x6d63890>的未定义局部变量或方法“devise_mapping”

这是我使用自动生成的partial _devise_links.html的时候。

<%-if控制器名称!='会话“%><%=link_to t('devise.sessions.link'),new_session_path(resource_name)%><br/><%结束-%><%-如果设备映射可注册?&&控制器名称!='注册“%><%=link_to t('devise.registrations.link'),new_registration_path(resource_name)%><br/><%结束-%><%-如果设备映射可恢复?&&控制器名称!='密码“%><%=link_to t('devise.passwords.link'),new_password_path(resource_name)%><br/><%结束-%><%-如果设备映射可确认?&&控制器名称!='确认书“%><%=link_to t('devise.confirmations.link'),new_confirmation_path(resource_name)%><br/><%结束-%><%-如果devise_mapping.lockable?&&控制器名称!='解锁“%><%=link_to t('devise.unlocks.link'),new_unlock_path(resource_name)%><br/><%结束-%>

有什么解决办法吗?我假设devise_mapping变量没有包含在我的视图中,但我该怎么办?

4个答案4

重置为默认值
45

您可以将助手方法添加到应用程序帮助程序.确保使用正确的型号名称(在我的情况下是:用户代表用户型号)。

定义设备映射Devise.mappings[:user]结束定义资源名称设备映射名称结束定义资源类设备映射到结束

更新日期:2014年1月28日

Devise的主分支表明设备映射现在存储在请求中:

#尝试根据请求路径查找设备的映射路由定义设备映射@设备映射||=请求.env[“设备映射”]结束

而且资源_名称别名为范围_名称也。请参见设备控制器.rb了解更多信息。

1
  • 没有我的功能或更新。Me quedo conel前部。 评论 2015年4月17日3:21
6

我意识到这个问题有点老了,但我想我明白了为什么你不能只呈现部分。您试图呈现的部分是显示在sign_in/sign_up表单下面的链接的部分。

如果您想将这些链接添加到应用程序中,Devise Wiki上的这个页面将向您展示如何执行此操作,其中包括创建您自己的部分。

编辑(2019-04-01):从Devise wiki页面复制信息以实现持久性。

如何:将sign_in、sign_out和sign_up链接添加到布局模板

首先添加sign_in/out链接,以便根据用户是否已登录显示适当的链接:
#视图/设备/菜单/登录项.html.erb<%if user_signed_in?%><li><%=link_to(“注销”,destroy_user_session_path,方法::delete)%></li><%else%><li><%=link_to('Login',new_user_session_path)%></li><%end%>
这个方法::delete如果使用默认的HTTP方法,则需要part。要更改它,您需要告诉Devise:
#配置/初始值设定项/设备.rb#用于注销资源的默认HTTP方法。默认值为:删除。config.sign_out_via=:获取
然后可以省略方法::delete在所有注销链接上。接下来是sign_up链接。同样,如果用户已经登录,则可以用其他有用的内容替换这些内容:
#视图/设备/菜单/_registration_items.html.erb<%if user_signed_in?%><li><%=link_to(“编辑注册”,Edit_user_registration_path)%></li><%else%><li><%=link_to(“注册”,new_user_registration_path)%></li><%end%>
然后在您的布局/应用程序.html.erb,如下所示:
#布局/应用程序.html.erb<ul class=“hmenu”><%=呈现“设计/菜单/注册项”%><%=呈现“设计/菜单/登录项”%></ul><%=产量%>
向CSS添加一些菜单样式(此处为水平菜单):
乌尔赫梅努{列表样式:无;边距:0 0 2em;填充:0;}乌尔赫梅努·李{显示:内联;}

而不是使用设备映射,您可以使用Devise.mappings[:user],假设所讨论的用户类是user。

0
-1

你的routes.rb文件中有devise_for调用吗?

例如,如果您将其用于User类,则路由将是:

devise_for:用户

有关更多信息,请参阅https://github.com/plataformatec/设计

0

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.