从导轨4中的控制器注销

时间:2015-05-23 10:09:28

标签: ruby-on-rails devise controller

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

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 [:用户]

我该怎么做?请帮帮我。

提前致谢。

1 个答案:

答案 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语句。通过使用一个,您可能暗示可能因为验证错误而无法进行保存,并且您需要向用户提供反馈。但在这种情况下,它更可能是一个例外,因为用户没有数据输入。您可以在应用程序级别处理它。