Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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 rails 3/heroku/devise:如何指定不同的';登录页';用户何时登录?_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails rails 3/heroku/devise:如何指定不同的';登录页';用户何时登录?

Ruby on rails rails 3/heroku/devise:如何指定不同的';登录页';用户何时登录?,ruby-on-rails,devise,Ruby On Rails,Devise,我们希望为我们的应用程序提供3种不同的登录表单: 默认的登录表单将他们带到正常的仪表板(就像我们现在做的那样) “foo”登录表单,如果他们使用该表单登录,则会将他们带到专用屏幕 一个“酒吧”签到表,将他们带到另一个特殊用途的屏幕 我认为正确的方法是 a) 为/foo和/bar创建一个新路由,可能将两者指向同一个signin方法,但在路由中添加一个url参数“signin_type”,告诉我们它是哪种“类型”的signin表单 b) 实现一个自定义RegistrationsControlle

我们希望为我们的应用程序提供3种不同的登录表单:

  • 默认的登录表单将他们带到正常的仪表板(就像我们现在做的那样)

  • “foo”登录表单,如果他们使用该表单登录,则会将他们带到专用屏幕

  • 一个“酒吧”签到表,将他们带到另一个特殊用途的屏幕

我认为正确的方法是

a) 为/foo和/bar创建一个新路由,可能将两者指向同一个signin方法,但在路由中添加一个url参数“signin_type”,告诉我们它是哪种“类型”的signin表单

b) 实现一个自定义RegistrationsController方法(什么名称?)来处理登录表单(我们已经有了一个自定义的新方法和创建方法,因为我们的注册表单需要添加一个“参考代码”字段),并让该方法查看url参数“signin_type”,以将登录重定向到普通或foo,还是坏

c) 实现另一个处理signin submit的方法(这是另一个方法吗?),该方法查看一些特殊的嵌入表单值以确定使用了哪个签名表单


这是我最好的猜测。如果正确的话,是如何做(b)和(c)让我感到困惑。如果您有任何想法,我们将不胜感激

我想你可能是想过度设计这个。我将使用页面中的单符号来实现这一点,并且只使用条件逻辑来覆盖designe控制器的(resource)方法的(resource)路径中的
后符号。这不仅在现在更容易实现,而且在将来也更容易维护。只需添加到
应用程序控制器.rb

protected

  def stored_location_for(resource)
    nil
  end

  def after_sign_in_path_for(resource)
    if condition_foo
      redirect_to foo_url
    elsif condition bar
      redirect_to bar_url
    else
      redirect_to dashboard_url
    end
  end

第一个方法覆盖designe的默认位置
root
,并将其设置为nil,然后后面的逻辑就很简单了。这应该可以满足您的需要。

谢谢,但如果我正确理解了建议,不会让我有不同的登录页面(3个登录页面需要看起来不同,因为它们登录到应用程序的不同“部分”),实际上,如果您愿意,您仍然可以有3个不同的登录页面。只需按照教程将登录表单添加到任意页面即可。然后它将按照我回答中的逻辑重定向到适当的位置。