当用户在注册或表单提交时输入错误输入时,如何创建错误消息

时间:2015-04-21 04:27:47

标签: ruby-on-rails controller

我的rails应用程序上有两个表单,要求用户输入代码以确认它们属于学校,而另一个表单则是教室的代码。每次用户输入或离开代码为空时,我都会收到以下错误消息:

First argument in form cannot contain nil or be empty

它总是在控制器的create方法中,所以我必须没有正确的语法。

以下是发生错误的两个控制器。

注册控制器

class RegistrationsController < Devise::RegistrationsController
  skip_before_filter :verify_authenticity_token, :only => :create

  def update 
    super
  end

  def new
    super
  end

def create
    code = params[:user][:code]
    @school = School.where(:code => code).first

    unless @school
      flash[:error] = "School code not valid"
      render :new
    end

    params[:user][:school_id] =  @school.id
    super
  end

学校管理员

def create_teacher
  authorize @school
  params[:user][:school_id] = @school.id
  params[:user][:role] = "teacher"
  @teacher = User.create(teacher_params)

  if @teacher.id.nil?
    flash[:error] = @teacher.errors.full_messages
    render :new_teacher
  else
    respond_with @school
  end
end

如何更正此问题,以便呈现Flash错误消息?

编辑屏幕拍摄实际错误。注意,它们都在create方法中,所以我认为它是一个相同的问题。 Registration#Create error

Pin#Create error

编辑:将用户添加到学校的注册表。

<div class="container">
<div class="panel panel-default">
  <div class="panel-heading">
    <h1>Sign up</h1>
  </div>

  <div class="panel-body">
    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
      <%= devise_error_messages! %>
       <div class="form-group">
        <%= f.label :name %>
        <%= f.text_field :name, autofocus: true, class: "form-control" %>
      </div>

      <div class="form-group">
        <%= f.label :email %>
        <%= f.email_field :email, autofocus: true, class: "form-control" %>
      </div>


      <div class="form-group">
        <%= f.label :school_code %>
        <%# f.text_field :code, class: "form-control" %>
        <input type="text" id="code" name="user[code]" value>

      </div>

      <div class="form-group">
        <%= f.label :password %>
        <%= f.password_field :password, class: "form-control" %>
      </div>
       <div class="form-group">
        <%= f.label :password_confirmation, "Confirm Password" %>
        <%= f.password_field :password_confirmation, class: "form-control" %>
      </div>

      <strong>Student</strong> <%= f.radio_button(:role, "user") %> 
      <div class="form-group">
        <%= f.submit "Sign up", class: "btn btn-lg btn-primary" %>
      </div>



    <% end %>
  </div>

  <div class="panel-footer">
    <%= render "devise/shared/links" %>
  </div>

1 个答案:

答案 0 :(得分:1)

我认为问题在于你的<%= form_for .. %>如果我输入一个无效的参数,我会得到同样的错误。对于学校,请尝试<%= form_for @school %>并确保您的控制器中的新方法(无论哪个人正在使用表单呈现页面)正在创建对象的新实例,

def new @school = School.new end

与引脚相同


这样的东西可能就是你要找的东西

before_action :check_code,     only: :create
...
def check_code
  unless School.find_by school_code params[:school_code]
    flash[:error] = "Invalid school code"
    redirect_to new_reg_path
  end
end

并显示Flash消息

<% flash.each do |message_type, message| %>
  <div class="alert alert-<%= message_type %>">
    <%= message %>
  </div>
<% end %>