我有一个注册系统,在测试阶段,需要邀请才能注册。用户请求邀请,然后发送带有代码嵌入链接的电子邮件回到站点。例如:
`http://domain.com/register?invitation_token=V80vy3muGvjORfu2eA8SCg`
Rails然后在路由文件中捕获URL的这个令牌部分作为此路由:
`get 'register/:invitation_token', :controller => 'users', :action => 'new', as: 'accept'`
这样做的目的是允许系统显示注册表单,并预先填写用户的电子邮件。通过这种方式,我们可以跟踪哪些测试用户发出的邀请最多,回复最多等等,作为一种竞赛。
网址会路由到用户#new 操作,其中包含 if语句,以确定表单的显示方式。
users/new.html.erb
<% if @user.invitation %>
<script type="application/javascript">
$(window).load(function() {
$('#DialogPop').bPopup({loadUrl:'form', speed:'fast'});
})(jQuery);
</script>
<% else %>
<%= render partial: 'form', locals: { isAjaxed: true } %>
<% end %>
如果用户的网址中嵌入了邀请令牌,则用户#new 会通过调用弹出窗口(通过bPopup
)对其进行处理,然后呈现用户形成部分(users/_form
)。
问题:
弹出窗体正确显示,表明正在从users/new.html.erb
文件中正确处理JS调用。但是,users/_form.html.erb
表单的内容未显示。
我在这里缺少什么?
仅供参考 - UsersController
代码在这里......:
def new
@user = User.new(:invitation_token => params[:invitation_token])
@user.email = @user.invitation.email if @user.invitation
respond_to do |format|
format.html {}
end
端
注意:来自令牌的信息正在传递。我可以确认,在显示表单时,它会显示预先填写的用户的电子邮件地址。
bPopup
的弹出功能在网站的其他区域完美运行,所以我知道它不是JS代码,除了它是URL调用到 'form'
。
编辑添加视图...
users/_form.html.erb
<div id="new-form-holder">
<%= isAjaxed = false unless (defined? isAjaxed) %>
<%= form_for @user, remote: isAjaxed do |f| %>
<%= f.hidden_field :invitation_token %>
<%= f.text_field(:name, class: 'txtbx flt-left', style: 'width: 130px', placeholder: 'Name...') %>
<%= f.text_field(:surname, class: 'txtbx flt-left', style: 'width: 170px', placeholder: 'Last Name...') %>
<% if @user.invitation %>
<%= f.text_field(:email, class: 'txtbx flt-left', style: 'width: 325px', placeholder: 'Email...', :disabled => true) %>
<% else %>
<%= f.text_field(:email, class: 'txtbx flt-left', style: 'width: 325px', placeholder: 'Email...') %>
<% end %>
<%= f.password_field(:password, class: 'txtbx flt-left', style: 'width: 325px', placeholder: 'Password...') %>
<%= f.password_field(:password_confirmation, class: 'txtbx flt-left', style: 'width: 325px', placeholder: 'Confirm password...') %>
<%= content_tag(:div, image_submit_tag("img_blank.png", id: 'btnSubmit', class: 'btn-lrg flt-right', title: 'Submit'), class: 'btn-lrg flt-left submit-holder') %>
<%= content_tag(:div, image_tag("img_blank.png", id: 'btnCancel', class: 'btn-lrg flt-right', title: 'Cancel'), class: 'btn-lrg flt-left submit-holder') %>
<% end %>