我想从控制器注销。我的控制器看起来像
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]
我怎样才能做到这一点?请帮帮我。
提前致谢。
您正在重定向,向发出GET请求,这是一条devise#sessions#destroy
不存在的路由。signout
Devise中的路由已映射到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] 删除。
我来说两句