为什么验证错误消息不显示?

时间:2013-01-16 09:55:13

标签: ruby-on-rails ruby validation ruby-on-rails-3.2

我正在开发一个节省用户的简单项目。我遵循Ruby on Rails教程及其步骤,但我陷入了关于显示验证错误消息的困境。当我单击“创建我的帐户”按钮而不填写空白时,直接重定向到/ users。但我无法看到验证错误。代码如下:

user.rb

class User < ActiveRecord::Base
  has_secure_password

  attr_accessible :name, :email, :password, :password_confirmation

  before_save { |user| user.email = email.downcase }

  validates :name, presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence:   true,
                    format:     { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }
  validates :password, presence: true, length: { minimum: 6 }
  validates :password_confirmation, presence: true
end

UserController中:

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
  end
end

new.html.erb

<% provide(:title, 'Sign up') %>
   <h1>Sign up</h1>

   <div class="row">
     <div class="span6 offset3">
       <%= form_for(@user) do |f| %>
         <%= render 'shared/error_messages' %>
         <%= f.label :name %>
         <%= f.text_field :name %>
         <%= f.label :email %>
         <%= f.text_field :email %>

         <%= f.label :password %>
         <%= f.password_field :password %>

         <%= f.label :password_confirmation, "Confirmation" %>
         <%= f.password_field :password_confirmation %>

         <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
       <% end %>
     </div>
   </div>

application.html.erb

<!DOCTYPE html>
   <html>
     <head>
       <title><%= full_title(yield(:title)) %></title>
       <%= stylesheet_link_tag    "application", media: "all" %>
       <%= javascript_include_tag "application" %>
       <%= csrf_meta_tags %>
       <%= render 'layouts/shim' %>    
     </head>
     <body>
       <%= render 'layouts/header' %>
       <div class="container">
         <% flash.each do |key, value| %>
           <div class="alert alert-<%= key %>"><%= value %></div>
         <% end %>
         <%= yield %>
         <%= render 'layouts/footer' %>
         <%= debug(params) if Rails.env.development? %>
       </div>
     </body>
   </html>

的routes.rb

SampleApp::Application.routes.draw do

  root to: 'static_pages#home'

  match '/signup',  to: 'users#new'
  match '/help',to: 'static_pages#help'
  match '/about',to:'static_pages#about'
  match '/contact',to:'static_pages#contact'
  match "/users", to:'users#showall'
  match '/users/:id', to: 'users#show', as: 'user'
end

_error_messages.html.erb

<% if @user.errors.any? %>
 <div id="error_explanation">
   <div class="alert alert-error">
     The form contains <%= pluralize(@user.errors.count, "error") %>.
   </div>
   <ul>
   <% @user.errors.full_messages.each do |msg| %>
     <li>* <%= msg %></li>
  <% end %>
   </ul>
 </div>
<% end %>

1 个答案:

答案 0 :(得分:0)

我认为以下SO问题底部的“更新 - 解决方案”也会对您有所帮助。

Rails render route path

正如同上提到的那样,通过将“用户”声明为资源,您可以获得为该资源定义的所有正确路由。