【问题标题】:redirect_to is not working into rescue blockredirect_to 无法进入救援块
【发布时间】:2016-12-05 19:12:11
【问题描述】:

我正在使用 Octokit 登录。

helper_method :user

def show
end 

def user
  client = Octokit::Client.new(access_token: session[:access_token])
  begin
    @user = client.user
  rescue => e
    redirect_to root_path
    return
  end
end 

root_path 在配置中

  root to: 'home#new'

rescue 执行了,但是 redirect_to 没有工作,它返回到与 main 方法相同的视图。注意:我在许多帖子中读到将 return 修复它,但它没有

【问题讨论】:

  • 从 root_path 中删除 ':' 并确保在 config/routes.rb 文件中定义了 root_path。此外,'return false' 以停止进一步执行。
  • @bkunzi01 我拼错了。我更新了帖子。 root 已定义,root_path 已正确定义

标签: ruby-on-rails octokit


【解决方案1】:

您的代码正在调用redirect_to 方法,但救援块随后返回nil。相反,将重定向和返回组合成一个语句:

client = Octokit::Client.new(access_token: session[:access_token])
begin
  @user = client.user
rescue => e
  redirect_to root_path and return
end

其实你根本不需要return,除非方法中这个语句后面有东西。这是因为在 Ruby 中,最后一条语句是隐式返回的。

【讨论】:

  • 我试过了,没用。问题是代码在辅助方法中而不是在方法控制器中?
  • 我更新了帖子以澄清@mysmallidea
  • 如果没有用户,Octokit 真的会引发异常吗?
  • 是的,确实如此。我解决了这个问题。我在 helper_method 中调用该方法,因此该方法是从视图调用而不是从控制器调用
  • 就可以了 :) 也许在 before_action 中设置 @user 更有意义 - 这样视图和控制器就可以使用它,而您不必保留调用 Octokit::Client。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2023-01-13
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多