2011-02-22 21 views
1

我想写一个“病毒式”的beta前邀请应用程序,可以在usehipster.com或fork.ly上看到。Rails - 我如何设置一个id作为令牌(pre-beta邀请应用程序,如usehipster)

基本上,未来测试仪:

1)进入他的电子邮件

2.)被重定向到的图(COMING_SOON页)

3.)收到这样一个链接:在视图中显示的“http:// localhost:3000 /?refer_to = 测试者的邀请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方法吗?

感谢您的帮助!

回答

1

我会回答问题2:

?在url中是传递参数的一种方式。使用GET方法的表单使用这种附加到url来传递参数。 URL?reffered_by = somevalue通过value somevalue传递参数referenced_by。现在如果在我们的控制器中,我们想要这个值,我们可以调用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中没有定义路由或资源,则不能使用参数 "#{root_url}/#{@invitation.id}"来传递参数。例如,当你定义

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

在routes.rb中,然后将其理解最后一个斜线之后传来的部分参数id的值,我们会得到它作为控制器params[:id]

相关问题