RoR:如何创建“有效注册码”查找?

时间:2009-04-26 02:53:46

标签: ruby-on-rails ruby routes

我希望能够以电子邮件链接的形式向潜在用户提供代码(例如mysite.com/signup?beta=rapunzel)

当有人点击链接时,它会使用值填充hidden_​​field(仅使用:params [:beta]工作?)

然后在创建用户之前,它通过检查另一个我有不同beta代码的表来验证。

然后继续存储哪些代码或者只是beta.id。

连连呢?插件已经存在?

感谢。

3 个答案:

答案 0 :(得分:1)

当您的用户访问mysite.com/signup时,与该路由关联的操作将使用params [:beta]存储值“rapunzel”。您可以将其分配到视图中,方法是将其分配到实例变量(@beta)中,然后按计划通过隐藏字段将其传递回用户控制器,并在保存用户对象之前将其与表进行比较。

或者,如果他们传递的是有效的测试版代码,您只能允许您的用户访问注册页面,在这种情况下,您不需要任何特殊的表单字段:

def signup
  unless BetaCode.find_by_code(params[:beta])
    flash[:notice] = "You can't sign up without a beta code!"
    redirect_to root_path 
  end
end

答案 1 :(得分:1)

您从网址获取的参数取决于您的路线设置方式。根据您当前的路线,您将获得:

params[:beta] = "rapunzel"

如果您将路线指定为:

map.connect '/signup/:beta', :controller => 'signup', :action => 'beta'

您可以向他们发送一个链接,例如:mysite.com/signup/rapunzel,您将获得与之前相同的beta参数。

要将beta字段添加到表单上,只需将其作为表单页面模板上的隐藏字段包含在内。

在控制器中添加如下内容:

@beta_id = params[:beta]

然后在视图模板中输入:

hidden_field_tag 'beta', @beta_id

然后,当他们注册并创建一个正确的ID时,您可能希望将用户表中行的关联挂钩到“beta”表中包含beta id的行。如果您只想允许单个用户注册每个测试版ID,那么这可能是测试版表上的has_one关联,如果有多个人可以注册,则可能是has_many。

答案 2 :(得分:1)

我会通过验证完成此操作。

class User < ActiveRecord::Base
  validate_on_create {|r|
    beta_code = BetaCode.find_by_code(r.beta_code)

    beta_code && beta_code.destroy ||
      r.errors.add(beta_code, "is invalid")
  }

  attr_accessor :beta_code
end

以您的形式:

<% form_for(@user) do |f| %>
  # fields...
  <%= f.text_field :beta_code %>
<% end %>

这假设你有一个BetaCode模型,其表包含一个beta代码列表。