我希望能够以电子邮件链接的形式向潜在用户提供代码(例如mysite.com/signup?beta=rapunzel)
当有人点击链接时,它会使用值填充hidden_field(仅使用:params [:beta]工作?)
然后在创建用户之前,它通过检查另一个我有不同beta代码的表来验证。
然后继续存储哪些代码或者只是beta.id。
连连呢?插件已经存在?
感谢。
答案 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代码列表。