1

我正在尝试编写一个“病毒式”预测试邀请应用程序,正如人们可以在usehipster.com或 fork.ly上看到的那样。

基本上,未来的测试人员:

1.) 输入他的电子邮件

2.) 被重定向到一个视图(一个coming_soon 页面)

3.) 收到一个类似这样的链接:“http://localhost:3000/?referred_to= the tester's invite id ”显示在视图中。

4.) 并收到一封带有相同链接的电子邮件。

如果我理解得很好,“测试人员的邀请 id”充当令牌,以跟踪邀请来自哪些测试人员。

我的问题:

1.) 如何在链接中生成 id?我不能使用 before_create,因为在测试人员注册时尚未设置邀请 ID。

我试过这个:

在邀请控制器中

def coming_soon
  @invitation = Invitation.last
end

在意见/邀请/coming_soon.html.erb

...
Copy and paste the following link to share wherever you want!</p>

<%= text_field_tag 'code', root_url + "?reffered_by=" + @invitation.id.to_s %>

你认为他们会这样做吗?

2.) 为什么链接中有问号?(或类似 ?reffered_by= 为什么不只是 root_url/@invitation.id.to_s) 这与路线有关?它是一个get方法吗?

谢谢你的帮助!

4

1 回答 1

1

我将回答问题2:

? in url 是一种传递参数的方式。使用 GET 方法的表单使用这种附加到 url 来传递参数。URL ?reffered_by=somevalue 传递参数refered_by,其值为somevalue。现在,如果在我们的控制器中,我们想要这个值,我们可以调用params[:referred_by],我们将得到“somevalue”的值。如果我们想传递多个参数,我们可以使用 & 传递它。例如,

"#{root_url}?referred_by=#{@invitation.id}&referred_time_stamp=#{Time.now.strftime(%Y%m%d%H%M%S)}"

现在,我们可以在控制器中以 params[:referred_by] 和 params[:referred_time_stamp] 的形式访问这些参数。

如果您没有在 routes.rb 中定义路由或资源,则无法使用 id 传递参数 "#{root_url}/#{@invitation.id}"。例如,当您定义

map.connect ':controller/:action/:id'

在 routes.rb 中,它理解最后一个斜杠之后的部分是参数 id 的值,我们将params[:id]在控制器中获取它。

于 2011-02-22T19:21:40.587 回答