我是 Rails 新手,正在尝试修改由另一个团队编写的应用程序。我有一个常见问题是验证失败后需要保留表单字段。在我们的应用程序中,用户提交姓名、电子邮件和邀请码等基本信息。我在控制器中验证邀请码。如果失败,它当前会执行一个redirect_to :back
但会丢失用户填写的信息并清除表单。从我研究过的其他页面来看,似乎正确的做法是render :action => :new
. 但是,当我尝试时,我得到了错误。
这次尝试...
format.html { render :action => "new" }
都给出相同的结果...
模板丢失
缺少模板 after_step/new, application/new with...
以前的开发者设置的方式,表单的第1步是在“users/registrations/new”,但是下面的步骤是在“after_step/step_two”等。所以,表单提交时,它是在“after_step_controller” .rb" 我正在做我的验证。显然,我看到它正在尝试在该控制器上呈现“新”操作而不是“registrations_controller.rb”。
然而,当我试图强迫它...
format.html { render :template => "registrations_controller/new" }
format.html { render :action => "new", :controller => "registrations" }
...我仍然收到缺少模板的错误。因此,我尝试了我在网上找到的其他建议......
format.html { render :template => "users/registrations/new" }
format.html { render :file => "users/registrations/new.html.erb" }
这些也不起作用,因为他们给出了这个错误:
NilClass:Class 的未定义方法“model_name”
然后我对此进行了研究,大多数人说“新”功能并没有创建新用户。但是,代码在那里,所以我不确定发生了什么。
谁能指出我正确的方向?这显然不是一个阻碍,但为了更好的用户体验,我希望表单字段在验证失败时保留其值。
这里有一些信息...
用户/注册/new.html.erb
<%= form_for(@user, :url => step_two_path) do |f| %>
<div class="signup_step_mid_content">
<div class="step_content_block">
<h3> First, tell us a little bit about yourself:</h3>
<div class="signup_filed_small mrgn_r_20">
<label>First Name</label>
<%= f.text_field :first_name, :title => "First Name", :placeholder => "First Name" %>
</div>
注册控制器.rb
def new
@user = User.new
@invite_code = params[:invite_code]
end
after_step_controller.rb
def step_two
@user = User.find_by_email(params[:user][:email])
respond_to do |format|
@tester = Prefinery::Tester.new(:beta_id => 1234)
@tester.email = params[:user][:email]
@tester.invitation_code = params[:user][:invitation_code]
@tester.status = 'active'
if !@tester.save
#format.html{redirect_to :back }
#format.html { render :template => "registrations_controller/new" }
#format.html { render :action => "new", :controller => "registrations" }
#format.html { render :action => "new" }
#format.html { render :template => "users/registrations/new" }
#format.html { render :file => "users/registrations/new.html.erb" }
让我知道是否需要任何进一步的信息。