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

时间:2015-10-20 20:43:52

标签: ruby-on-rails url referrer

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

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

当它工作时,URL进来,程序发出GET命令" /?ref = b9270b78a6"并被重定向到' / 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,但是再次 - 当我可能这样做的时候,它被重定向,我不能。

非常感谢任何想法!

2 个答案:

答案 0 :(得分:2)

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

顺便说一句 - 另一个提示。将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]

答案 1 :(得分:0)

虚假警报每个人......这是我的路线。到底是什么......我在8个星期内没有改变它们,它们突然崩溃了。更不用说它是最无害的小路线。绝对没有理由这应该发生,但是Happy Rails,确实如此。

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