Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 重定向并登录还是登录并重定向?_Ruby On Rails_Ruby_Ruby On Rails 3_Sorcery - Fatal编程技术网

Ruby on rails 重定向并登录还是登录并重定向?

Ruby on rails 重定向并登录还是登录并重定向?,ruby-on-rails,ruby,ruby-on-rails-3,sorcery,Ruby On Rails,Ruby,Ruby On Rails 3,Sorcery,简单的问题。什么是首选,为什么,或者根本不重要? 魔法宝石示例: if @user.save redirect_to index_path auto_login(@user) 或 仅仅是一个地方的一个设备,一行可能没有那么重要,但是什么更好、更安全,为什么或者它真的不重要?只要您为重定向到调用提供有效的参数,顺序就不重要了redirect\u to将抛出异常,因此auto\u login将不会运行,但您不会看到redirect\u to中的错误,除非您做了一些非常错误的事情,例如传入n

简单的问题。什么是首选,为什么,或者根本不重要? 魔法宝石示例:

if @user.save
  redirect_to index_path
  auto_login(@user)


仅仅是一个地方的一个设备,一行可能没有那么重要,但是什么更好、更安全,为什么或者它真的不重要?

只要您为
重定向到
调用提供有效的参数,顺序就不重要了<如果您没有提供有效的参数,code>redirect\u to
将抛出异常,因此
auto\u login
将不会运行,但您不会看到
redirect\u to
中的错误,除非您做了一些非常错误的事情,例如传入
nil
选项,或者您已经在方法中调用了
redirect\u to

我倾向于让
redirect\u排在最后,因为从控制流的角度来看,这是有意义的。在控制器操作中执行所有代码后,它让您大致了解Rails将把您带到哪里,它还可能帮助您避免多次调用
redirect\u to
,并导致出现
DoubleRenderError


如果您查看并单击“ShowSource”链接,您可以看到它基本上只是设置变量,因此您可以在任何地方调用它
redirect\u to
看起来类似于在其他语言中看到的
return
语句,但它的行为与之不同,所以请记住这一点。这只是一种在控制器上设置某些状态的方法。

我会先登录,然后重定向

您要重定向到的位置可能取决于登录的用户。在您的情况下可能不是这样,但在其他情况下可能是这样,并且在以后的应用程序开发中也可能是这样


例如,如果索引路由已更改,因此它会根据用户是否登录而转到不同的位置,那么无论您是在重定向之前还是之后登录,都非常重要。如果您在重定向后登录,那么您将重定向到未登录用户的路由版本。

注意,您可以在操作中多次使用
redirect\u to
,只需确保您的代码可以使用的各种分支不会导致多次调用。
if @user.save
  auto_login(@user)
  redirect_to index_path