【问题标题】:Signout from a controller in rails 4从 rails 4 中的控制器注销
【发布时间】:2015-08-05 08:17:09
【问题描述】:

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

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 哪个 要使用的映射:@request.env["devise.mapping"] = Devise.mappings[:user]

我该怎么做?请帮帮我。

提前致谢。

【问题讨论】:

标签: ruby-on-rails devise controller


【解决方案1】:

您正在重定向,它向 devise#sessions#destroy 发出 GET 请求,这是一条不存在的路由。 Devise 中的 signout 路由映射到 DELETE 请求。而不是重定向你应该directly call the sign_out method Devise 提供给你。之后一定要把用户重定向到某个地方,也许是登录页面。

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

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

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

【讨论】:

  • 在放置 sign_out 之后我又遇到了另一个错误 _Missing template admissions/update, application/update with {:locale=>[:en], :formats=>[:html] , :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}。在以下位置搜索:*“/home/srabon-megh/RailsProjects/CT_Attendance/app/views”*“/home/srabon-megh/.rvm/gems/ruby-2.0.0-p247/gems/twitter-bootstrap-rails- 2.2.8/app/views" * "/home/srabon-megh/.rvm/gems/ruby-2.0.0-p247/gems/devise-3.4.1/app/views" _
  • 其实我想更新表中的一个字段,然后销毁会话。为此,我使用了<%= link_to "Sign out", attendance_path(present), :method => :put %> 之类的注销,它会更新操作,然后我想销毁会话。
  • 如果你只是想更新一个字段,你可以尝试继承设计会话控制器并做到这一点。 stackoverflow.com/questions/7854994/…
  • @Muktadir 很好,在注销用户后,您需要做一些事情。默认情况下,该操作将尝试渲染视图,在这种情况下,它将查找edit.html.erb,它不会退出。因此,只需在退出用户后重定向到所需位置即可。我会更新我的答案。
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 2012-07-26
相关资源
最近更新 更多