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

How do I access the ref portion of a URL in rails before redirect?

我有一些可以正常工作的代码现在似乎已损坏,我正试图找出原因。问题似乎部分集中在我的推荐系统上。

用户注册后,他们将获得一个唯一的推荐代码,即 http://localhost:3000/?ref=b9270b78a6(来自我的本地计算机)。从理论上讲,他们可以将此信息传递给他们的朋友,当他们的朋友通过他们的推荐URL 来到该网站时,我会记录该 ref 并将 +1 推荐归功于初始用户。

虽然它正在工作,但 URL 进来了,程序为“/?ref=b9270b78a6”发出 GET 命令,并被重定向到“/frontpage”,但 ref 被存储为 params[:参考]。现在 params[:ref] 是空白的,它基本上让我的程序说没有人推荐其他人。

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

我的问题是 a) 我不知道如何将 'b9270b78a6' 捕获为 prams[: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]吗?

我什至不知道您可能需要查看哪些代码(控制器、模型、视图)才能弄清这个问题,很高兴更新任何可能有用的内容。我在黑暗中最接近的尝试是,我需要使用 URI::parse(url) 来解析传入的 URL,但是再次 - 到我可能这样做的时候它已经重定向,我不能。

非常感谢任何想法!

大家误报了……这是我的路线。到底是什么...我已经 8 周没有更换它们了,它们突然坏掉了。更不用说这是最无害的小路线。绝对没有理由发生这种情况,但 Happy Rails 确实发生了。

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

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

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

# application_controller.rb
before_action :set_ref

def set_ref
  session[:ref] ||= params[:ref] if params[:ref]
end

然后以后保存就可以得到

referring_user_id = session[:ref]