Ruby on rails RoR:我如何创建一个;有效注册码“;查找?
我希望能够以电子邮件链接的形式向潜在用户提供代码(例如mysite.com/signup?beta=rapanzel) 当有人点击链接时,它会用该值填充一个隐藏的_字段(使用:params[:beta]行吗?) 然后,在创建用户之前,它通过检查另一个表(其中我有不同的beta代码)进行验证 然后继续存储哪些代码,或者可能只是beta.id 建议?插件已经存在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时,与该路由相关联的操作将在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的一个建议非常好。您肯定只想在创建时进行验证,而不是每次保存用户对象时进行验证。否则,这是一个好方法。