Ruby on rails RoR:我如何创建一个;有效注册码“;查找?

Ruby on rails RoR:我如何创建一个;有效注册码“;查找?,ruby-on-rails,ruby,routes,Ruby On Rails,Ruby,Routes,我希望能够以电子邮件链接的形式向潜在用户提供代码(例如mysite.com/signup?beta=rapanzel) 当有人点击链接时,它会用该值填充一个隐藏的_字段(使用:params[:beta]行吗?) 然后,在创建用户之前,它通过检查另一个表(其中我有不同的beta代码)进行验证 然后继续存储哪些代码,或者可能只是beta.id 建议?插件已经存在 谢谢。当用户点击mysite.com/signup时,与该路由相关联的操作将在params[:beta]中存储值“rapanzel”。您可

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

当有人点击链接时,它会用该值填充一个隐藏的_字段(使用:params[:beta]行吗?)

然后,在创建用户之前,它通过检查另一个表(其中我有不同的beta代码)进行验证

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

建议?插件已经存在


谢谢。

当用户点击mysite.com/signup时,与该路由相关联的操作将在params[:beta]中存储值“rapanzel”。您可以通过将其分配到实例变量(@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

从URL中获取的参数取决于路由的设置方式。使用当前路线,您将获得:

params[:beta] = "rapunzel"
如果将路线指定为:

map.connect '/signup/:beta', :controller => 'signup', :action => 'beta'
你可以给他们发一个链接,比如:mysite.com/signup/rapanzel,你会得到和以前一样的beta参数

要将beta字段添加到表单中,只需将其作为隐藏字段包含在表单页面模板中即可

在控制器中,输入如下内容:

@beta_id = params[:beta]
然后在视图模板中放置:

hidden_field_tag 'beta', @beta_id

然后,当他们注册并创建一个合适的id时,您可能希望将用户表中他们的行与“beta”表中包含beta id的行关联起来。如果你只想让一个用户注册每个beta id,那么它可能是beta表上的一个has_-one关联;如果有多人可以注册,那么它可能是一个has_-many关联。

我会通过验证来完成这项工作

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
class用户
以您的形式:

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

#字段。。。

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

嗨,好吧,酷…我想我要寻找的是多个关联…所以假设我创建一个beta表,beta.id作为一列,beta.beta作为另一列(?)我是否创建验证来进行检查,或者如何检查它是否有效?是的,您可以使用验证来检查beta id是否有效。它可以作为验证添加,在新用户注册时运行。如果你想让它更安全(这样你就不能在没有它的情况下创建一个beta帐户),我会将它添加到控制器中,并对model.ah进行验证,因此模型是BetaCode,它有多行beta值不同(例如BetaCode.id和BetaCode.beta)和“除非”子句将检查所有的值,如果它没有找到它,它将是一个无效的注册页?没错。除非与“if!子句”相同。这是Ruby的一个漂亮但令人困惑的习惯用法,很多人不使用它,因为这是一个个人风格的东西是的,这就是我从您在原始问题中的描述中设想的BetaCode:一个包含有效beta代码的条目表,行为“id”和“code”。当然,如何真正做到这一点取决于您,Daemin的一个建议非常好。您肯定只想在创建时进行验证,而不是每次保存用户对象时进行验证。否则,这是一个好方法。