从Rails 4中的控制器注销

穆克塔迪尔

我想从控制器注销。我的控制器看起来像

def update
if @attendance.update_attribute(:logout_at, Time.now.localtime)
  redirect_to signout_path and return
end
end

我的路线看起来像

  devise_scope :employees do
     get "signout" => "devise/sessions#destroy"

  end

  devise_for :employees, :controllers => { registrations: 'registrations' }

但是它给了错误

未知动作

找不到路径“ / signout”的设计映射。发生这种情况的原因可能有两个:1)您忘记将路径包装在作用域块内。例如:devise_scope:user do get“ / some / route” =>“ some_devise_controller” end 2)您正在测试绕过路由器的Devise控制器。如果是这样,您可以明确地告诉Devise要使用哪个映射:@ request.env [“ devise.mapping”] = Devise.mappings [:user]

我怎样才能做到这一点?请帮帮我。

提前致谢。

穆罕默德(Mohamad)

您正在重定向,向发出GET请求,这是一条devise#sessions#destroy不存在的路由。signoutDevise中路由已映射到DELETE请求。而不是重定向你应该直接调用的sign_out方法就是图谋提供给您。之后,请确保将用户重定向到某个地方,也许是登录页面。

附带说明,在Rails 4中,您可以update(attribute: value)直接调用您都不需要打电话return

def update
  @attendance.update(logout_at: Time.now.localtime)
  sign_out
  redirect_to login_path      
end

我删除了包装更新调用的if语句。通过使用它,您暗示着可能有一个原因,例如由于验证错误而无法进行保存,因此您需要向用户提供反馈。但是在这种情况下,由于用户没有输入数据,因此很可能是一个例外。您可以在应用程序级别进行处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Rails 4中的控制器注销

来自分类Dev

在Rails控制器中注销用户

来自分类Dev

在Rails 4中的控制器中添加验证错误

来自分类Dev

Rails4控制器#create中的ActiveModel :: MissingAttributeError

来自分类Dev

如何在Rails 4中测试控制器问题

来自分类Dev

Rails 4在单独的控制器中搜索多个模型

来自分类Dev

在Rails 4中翻译控制器action_name

来自分类Dev

从Rails 4中的任何控制器渲染不同的视图

来自分类Dev

如何在Rails 4中测试控制器问题

来自分类Dev

控制器中的Rails 4功能未运行

来自分类Dev

Rails 4在单独的控制器中搜索多个模型

来自分类Dev

如何找到在Rails 4中定义的控制器方法?

来自分类Dev

rails 4控制器名称空间

来自分类Dev

Rails 4范围模型/控制器

来自分类Dev

Rails 4测试控制器故障

来自分类Dev

什么是Rails控制器中的ivar?

来自分类Dev

从Rails中的控制器调用方法?

来自分类Dev

控制器中的Rails辅助模块

来自分类Dev

Rails:控制器中的Shell命令

来自分类Dev

在Rails中前缀路由控制器

来自分类Dev

在Rails控制器中更新属性

来自分类Dev

控制器中的Ruby Rails循环

来自分类Dev

在控制器 Rails 中传递 id

来自分类Dev

Rails 控制器中的模型方法

来自分类Dev

Rails 在控制器中扩展模块

来自分类Dev

在 Rails 控制器中拆分参数

来自分类Dev

我可以在Rails 4中从当前控制器渲染另一个控制器的动作吗?

来自分类Dev

从Rails 4中的其他控制器/视图将数据保存在表中

来自分类Dev

Rails and devise-登录和注销后的测试控制器