rails 3应用程序before_filter with redirect_to

时间:2011-11-29 15:30:06

标签: ruby-on-rails ruby-on-rails-3

我的rails 3应用程序需要一个before_filter来检查用户是否已登录。如果已记录,则重定向到子域。我使用Devise作为日志系统。在sign_up之后,用户将重定向到他的子域,但如果他回到网站并再次登录,则必须再次将其重定向到他的子域。

我试过了:

if current_user.present?
company_id = current_user.company_id
@company = Company.find(company_id)
redirect_to @company.subdomain + "." + request.domain
end

使用此代码,网址为:www.mywebsite.comsubdomain.mywebsite.com 是的,我认为这是因为redirect_to适用于网页而非新网址。

我试过

if current_user.present?
company_id = current_user.company_id
@company = Company.find(company_id)
root_url(:host => @company.subdomain + "." + request.domain)
end

但同样的事情。我得到了与以前的测试相同的网址。

我该怎么做才能重定向到我的子域?

2 个答案:

答案 0 :(得分:2)

另一个stackoverflow问题的答案也应该是你的答案:https://stackoverflow.com/a/327154/346693

答案提供了什么:

class ApplicationController < ActionController::Base
  before_filter :check_uri

  def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
  end
end

你问题的方法是你没有提供完整的网址(http://sth.com vs sth.com)

答案 1 :(得分:0)

请考虑以下示例:another question

您可以将此作为起点。基本上你会把调用包装成authenticate_user!在你自己的处理程序之前,如果authenticate_user!引发一个例外,你可以进行重定向。

如果它没有引发异常,你可以在其他地方重定向。