Ruby on rails 在重定向之前,如何访问rails中URL的ref部分?

Ruby on rails 在重定向之前,如何访问rails中URL的ref部分?,ruby-on-rails,url,referrer,Ruby On Rails,Url,Referrer,我有一些代码在工作,现在似乎被破坏了,我正在努力寻找原因。问题似乎部分集中在我的推荐系统上 一旦用户注册,他们将获得一个唯一的推荐代码,即(从我的本地机器)。理论上,他们可以将此信息传递给他们的朋友,当他们的朋友通过他们的推荐URL访问该站点时,我会记录ref并将+1推荐归功于初始用户 当它工作时,URL进入,程序发出“/?ref=b9270b78a6”的GET命令,并被重定向到“/frontpage”,但ref被存储为params[:ref]。现在params[:ref]是空的,它基本上让我的

我有一些代码在工作,现在似乎被破坏了,我正在努力寻找原因。问题似乎部分集中在我的推荐系统上

一旦用户注册,他们将获得一个唯一的推荐代码,即(从我的本地机器)。理论上,他们可以将此信息传递给他们的朋友,当他们的朋友通过他们的推荐URL访问该站点时,我会记录ref并将+1推荐归功于初始用户

当它工作时,URL进入,程序发出“/?ref=b9270b78a6”的GET命令,并被重定向到“/frontpage”,但ref被存储为params[:ref]。现在params[:ref]是空的,它基本上让我的程序说没有人引用其他人

似乎我无意中删除了一些重要的东西,但我不知道是什么

我的问题是a)我不知道如何将“b9270b78a6”捕获为婴儿车[:ref],而且最重要的是,我似乎失去了这样做的机会,因为重定向会将浏览器指向一个通用URL,并在我获取代码之前执行“StaticPagesController#frontpage”控制器操作:

Started GET "/?ref=b9270b78a6" for ::1 at 2015-10-20 16:19:36 -0400
Started GET "/frontpage" for ::1 at 2015-10-20 16:19:36 -0400
Processing by StaticPagesController#frontpage as HTML
简言之:关于如何获取ref代码并将其保存为params[:ref]有什么想法吗

我甚至不知道你需要看什么样的代码(控制器、模型、视图)才能弄清这一点,所以很乐意用任何有用的东西来更新。我最近的一次尝试是,我需要使用URI::parse(url)来解析传入的url,但是再一次——当我可能这样做的时候,它已经被重定向了,而我不能


任何想法都非常感谢

每个人都虚惊一场……这是我的路线。见鬼…我已经8周没换了,而且突然坏了。更不用说这是最无害的小路线了。绝对没有理由发生这种情况,但Happy Rails确实发生了


感谢@Swards的帮助和学习经验

很高兴你找到了原因。其中一些错误很难用常用的调试方法找到

顺便说一句-另一个提示。在会话中抛出ref-您可以通过应用程序控制器中的before操作执行此操作,然后ref值将在需要时可用

# application_controller.rb
before_action :set_ref

def set_ref
  session[:ref] ||= params[:ref] if params[:ref]
end
然后,您可以在保存时获取它

referring_user_id = session[:ref]

我在日志中没有看到重定向消息。路由中的重定向将执行此操作。
将其保存为参数[:ref]
是什么意思?你总是希望它出现在那里吗?@Swards…我想这是一个很好的观点。在我疯狂地急于解决这个问题时,我没有考虑到这一点。你有什么想法吗?这就像定义了一个现有的路由,它从?ref=b9270b78a6发送到/frontpage。但为了安全起见,我看不到任何东西!我会研究一下中间件,在你到达控制器之前,有些事情正在发生。任何控制器重定向都将显示在日志中。您还添加了哪些可能影响访问的gem?Desive用于用户身份验证。不确定Desive何时在会话中查找用户id,但可能在控制器之前。在控制器中是否有一个before操作<代码>:验证用户身份可以这样做。谢谢!我已经看到了这个方法,并且已经实现了它,现在我知道我可以,我的实际问题是什么。再次感谢!