我在注册用户时尝试添加电子邮件确认。用户必须使用邀请代码和电子邮件地址填写表单,然后他们会收到包含激活链接的电子邮件。
所以我想做的就是拥有它,所以当用户填写表单时,它会提交表单并重新加载表单,以便它隐藏并显示消息"我们发送了一封电子邮件,请检查并点击链接"而不是重新加载整个页面。
signup.html.erb
这里我添加了remote:true
<%= form_tag(form_action, method: :get, remote: true, id: 'create-form') do %>
users_controller.rb
重定向有效,但format.js是未知格式
def new
... code checking params
if @user.user_email_confirmed
render :new
else
respond_to do |format|
format.html { redirect_to signup_path(@user.name, email: @user.email) }
format.js
end
end
new.js.erb
$('#create-form').hide().after('');
$('.login-form').append('<p class="link-sent">We have sent an activation link to the email address you entered - please be sure to check your spam or trash folders. Please click that link to complete account activation.</p>');
不确定我缺少什么,有什么想法吗?
答案 0 :(得分:1)
我真的不认为提交时表单正在调用的操作是new
操作,可能是您的控制器中有一些create
操作。
因此,当您点击表单的“提交”按钮时,由于您拥有remote: true
选项,它将通过Ajax发送,并且它正在调用的操作没有format.js
也没有{{1这就是为什么你会得到未知的格式。
确保在提交表单时调用哪个控制器操作,然后添加js.erb
和正确的format.js
视图。
请查看此blog post,这可能会有所帮助。