new.html
是一个注册表单,用于创建教师帐户。
它涉及错误处理。 _error_messages.html.erb
是处理错误的文件,应该填写所有文本字段。
例如,显示:
`
The form contains 3 errors.
Name can't be blank
Password confirmation can't be blank
Password confirmation doesn't match Password
但是,在new.html
中没有任何输入的情况下提交表单时,会显示错误
缺少模板导师/注册,申请/注册{:locale => [:en],:formats => [:html],:variants => [],:handlers => [:erb ,:builder,:raw,:ruby,:coffee,:jbuilder]}。搜索范围:*“C:/RailsInstaller/Ruby2.1.0/lib/ruby/gems/2.1.0/gems/web-console-2.0.0/lib/action_dispatch/templates”*“D:/ Sites / abc / app / views“
new.html.erb
<% provide(:title, 'Registeration') %>
<h1>Tutor Registration</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@tutor) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.text_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Confirm Password" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<%= f.label :gender %>
<%= f.select(:gender, ['Male', 'Female'] , class: 'form-control' )%>
<%= f.label :tutor_education_level %>
<%= f.select(:education_level, ['Bachelor', 'Master', 'Doctor'] , class: 'form-control' )%>
<%= f.label :tutor_institution %>
<%= f.text_field :institution, class: 'form-control' %>
<%= f.label :tutorial_experience %>
<%= f.text_field :experience, class: 'form-control' %>
<%= f.label :tutor_preferred_district %>
<%= f.text_field :district, class: 'form-control' %>
<%= f.label :tutor_preferred_subject %>
<%= f.text_field :subject, class: 'form-control' %>
<%= f.label :tutor_required_student_level %>
<%= f.select(:student_level, ['P1-P3', 'P4-P6', 'S1-S3', 'S4-S6'] , class: 'form-control' )%>
<%= f.submit "Create tutor's account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
视图/共享/ _error_messages.html.erb
<% if @tutor.errors.any? %>
<div id="error_explanation">
<div class="alert alert-danger">
The form contains <%= pluralize(@tutor.errors.count, "error") %>.
</div>
<ul>
<% @tutor.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
Tutor -controller
class TutorsController < ApplicationController
before_action :logged_in_tutor, only: [:edit, :update]
before_action :correct_tutor, only: [:edit, :update]
def index
@tutors = Tutor.all
end
def show
@tutor = Tutor.find(params[:id])
end
def new
@tutor = Tutor.new
end
def create
@tutor = Tutor.new(tutor_params)
if @tutor.save
log_in @tutor
flash[:success] = "Congratulations! Your registration is successful!"
redirect_to @tutor
else
render 'register'
end
end
def edit
@tutor = Tutor.find(params[:id])
end
def update
if @tutor.update_attributes(tutor_params)
flash[:success] = "Profile updated successfuly!"
redirect_to @tutor
else
render 'edit'
end
end
# Handle sign-up failure, to redirect the tutor to the registeration form again
def tutor_params
params.require(:tutor).permit(:name, :email, :password, :password_confirmation, :address,:gender ,:education_level,:institution,:exprience,:district,:subject,:student_level)
end
def logged_in_tutor
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
def correct_tutor
@tutor = Tutor.find(params[:id])
redirect_to(root_url) unless current_tutor?(@tutor)
end
end
答案 0 :(得分:0)
当您提交表单时,请求会发送到create
操作:
def create
@tutor = Tutor.new(tutor_params)
if @tutor.save
# if @tutor valid save it and redirect to show action
redirect_to @tutor
else
# else render the register template(or action)
render 'register'
end
end
在create
操作中有条件if
,在第一种情况下一切都很好,@tutor
已保存,Rails调用重定向以显示操作,否则Rails尝试{ {1}}注册不存在的模板(错误声称它)。要解决该问题,请使用所需的html代码创建render
模板,如果未保存register
,则该代码应运行。