简体   繁体   English

rails中缺少模板错误

[英]Missing template error in rails

new.html is a registration form ,which creates tutor account . new.html是一个注册表单,用于创建教师帐户。 It involves error handling . 它涉及错误处理。 _error_messages.html.erb is the file which handles the error ,like should be filling in all text fields . _error_messages.html.erb是处理错误的文件,应该填写所有文本字段。 eg , showing : ` 例如,显示:`

The form contains 3 errors.

    Name can't be blank
    Password confirmation can't be blank
    Password confirmation doesn't match Password

However ,when submits the form without any input in new.html ,it shows the error 但是,当在new.html没有任何输入的情况下提交表单时,它会显示错误

Missing template tutors/register, application/register with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 缺少模板导师/注册,申请/注册{:locale => [:en],:formats => [:html] ,: variants => [],:handlers => [:erb,:builder,:raw, :ruby,:coffee,:jbuilder]}。 Searched in: * "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" 搜索范围:*“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 /视图”

new.html.erb 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>

views/shared/_error_messages.html.erb 视图/共享/ _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

When you submit the form, request sends to the create action: 提交表单时,请求发送到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

In the create action there is a conditional if , in the first case all is good, @tutor has been saved and Rails call redirect to show action, otherwise Rails trying to render register template which is not exists(the errors claims about it). create操作中有一个条件, if ,在第一种情况下一切都很好, @tutor已经保存,Rails调用重定向显示操作,否则Rails尝试render不存在的寄存器模板(错误声称它)​​。 To resolve that issue create register template with desired html code which should run if @tutor isn't saved. 要解决该问题,请创建具有所需html代码的register模板,如果未保存@tutor ,则应运行该代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM