为什么我的rails简单验证不起作用

时间:2010-01-26 02:53:09

标签: ruby-on-rails

我有一个非常基本的rails应用程序。我正在玩验证。

控制器

class PagesController < ApplicationController
  def new
    @user = User.new
  end
  def edit
    @user = User.new(:state => params[:state], :country => params[:country])
    @user.save
  end
end

模型

class User < ActiveRecord::Base
    validates_presence_of :country
    validates_presence_of :state
end

查看/页/ edit.html.erb

<% form_for :user, @user, :url => { :action => "edit" } do |f| %>
  <%= f.text_field :country %>
  <%= f.text_field :state %>
  <%= submit_tag 'Create' %>
<% end %>

我想要做的就是在我没有输入任何内容时单击“创建”,然后进行验证并列出必填字段。我已经阅读了一些教程,它们使它变得如此简单。为什么我不能让这个工作?我究竟做错了什么?当我创建一个脚手架然后它工作正常,但在public / stylesheets中生成scaffold.css。 W / out脚手架现在我在公共文件夹中没有样式表。

1 个答案:

答案 0 :(得分:2)

您将表单发送到“编辑”操作,该操作不会进行任何处理。你需要它来进行“创建”动作,它应该是这样的:

def create
  @user = User.new(params[:user])

  if @user.save
    flash[:notice] = 'Your user was successfully created.'
    redirect_to users_path
  else
    render :action => 'edit'
  end
end

您的form_for行可以简短而且甜蜜。此外,您需要调用error_messages来获取自动生成的错误列表:

<% form_for @user do |f| %>
  <%= f.error_messages %>
  ...other fields go here...
<% end %>