我想从控制器注销。我的控制器看起来像
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"结束2)您正在测试Devise控制器 绕过路由器。如果是这样,你可以明确地告诉Devise 映射使用:@ request.env [" devise.mapping"] = Devise.mappings [:用户]
我该怎么做?请帮帮我。
提前致谢。
答案 0 :(得分:3)
您正在重定向,这会向devise#sessions#destroy
发出GET请求,这是一条不存在的路由。 Devise中的signout
路由映射到DELETE请求。而不是重定向,您应该{2}设计为您提供。之后一定要将用户重定向到某个地方,也就是登录页面。
附注,在Rails 4中,您可以直接拨打update(attribute: value)
。您也无需致电return
。
def update
@attendance.update(logout_at: Time.now.localtime)
sign_out
redirect_to login_path
end
我删除了包含更新调用的if语句。通过使用一个,您可能暗示可能因为验证错误而无法进行保存,并且您需要向用户提供反馈。但在这种情况下,它更可能是一个例外,因为用户没有数据输入。您可以在应用程序级别处理它。