2

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

用户.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

用户控制器:

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

新的.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>

应用程序.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>

路线.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 %>
4

1 回答 1

0

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

Rails 渲染路线路径

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

于 2013-03-28T16:57:27.857 回答