表单验证中的问题 - Ruby on Rails

时间:2017-01-09 05:19:44

标签: javascript ruby-on-rails ruby validation

我已经为我的注册页面添加了验证,但是当我加载注册页面时 出现错误。单击“提交”按钮后应显示错误 我需要做什么?

我的注册页面

  <% if !flash[:notice].blank? %>
  <div class="notice">
    <%= flash[:notice] %>
  </div>
<% end %>
<%= form_for @user,validate: true do |f| %>
<% if !@user.valid? %>
 <% if @user.errors.any? %>
    <ul class="Signup_Errors">
    <% for message_error in @user.errors.full_messages %>
      <li>* <%= message_error %></li>
    <% end %>
    </ul>
  <% end %>
<% end %>
<%= f.label("Name:") %>
<%= f.text_field(:user_name, class: "form-control") %></br>

<%= f.label("Email Address:") %>
<%= f.text_field(:email_id, class: "form-control") %></br>

<%= f.label("Password:") %>
<%= f.password_field(:password, class: "form-control") %></br>

<%= f.label("Confirm Password:") %>
<%= f.password_field(:password_confirmation, class: "form-control") %></br>

<%= f.submit("Register",class: "btn btn-primary") %>
<a class="btn btn-primary" style="margin-left:20px" href="/login" >Login</a>
<% end %>

我的模型,其中包含了我的验证

User.rb

class User < ApplicationRecord

    has_many :reviews
    has_secure_password 

    EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
    validates :user_name, :presence => true, :on => :create, :uniqueness => true, :length => { :in => 3..20 }
    validates :email_id, :presence => true, :on => :create, :uniqueness => true, :format => EMAIL_REGEX
    validates :password, :presence => true, :on => :create,  :confirmation => true #password_confirmation attr
    validates :password_confirmation, :presence => true
end

控制器

    def new
    puts "****Inside New Method******"
    @user = User.new
  end

  def create
   puts "****Inside create Method******"

   @user = User.new(user_params)
   puts @user.user_name
   if @user.save

    puts "** USER DETAILS SAVED SUCCESSFULLY****"
    flash[:notice] = "Registration successful, please login"
    flash[:color] = "valid";
    redirect_to "/login"
    else
        flash[:notice] = "Invalid Form"
        flash[:color] = "invalid"

   end

 end

加载页面时,单击“提交”按钮之前会出现“错误” 我已经包括:on =&gt; :创造,但它不起作用

请帮助!!

2 个答案:

答案 0 :(得分:0)

表单上的

if !@user.valid?可能会导致此问题。这不是必要的,因为您只是在保存记录之前检查记录在控制器中是否有效。

如果无法保存记录,您还应该添加render :new,否则会出现错误视图错误。

答案 1 :(得分:0)

打开rails控制台并尝试手动创建用户。是创造与否?

例如:

user = User.new(username: "test", email_id: "test@test.com", password: ...)

并使用

检查验证
user.valid!

如果验证失败,您将收到错误消息。如果没有错误则保存

user.save!