2010-01-26 123 views
1

我有一个非常基本的导轨应用程序。我正在玩验证。为什么我的导轨简单验证不起作用

控制器

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 %> 

所有我想要做的就是点击创建的时候我还没有输入任何东西然后进行验证并列出所需的字段。我读过一些教程,他们让它变得如此简单。为什么我无法得到这个工作?我究竟做错了什么?当我创建一个脚手架,然后它工作正常,但在公共/样式表中生成一个scaffold.css。 W/out脚手架现在我没有公用文件夹中的样式表。

回答

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 %> 
+0

为OP了解,新和创建工作,共同创造一个新的资源(新的呈现形式是很重要的,创建节约了它到数据库),并以相同的方式编辑和更新现有资源。 – Ben 2010-01-26 02:59:55

+0

谢谢。我错过了该死的f.error_messaages – joshn 2010-01-26 03:02:24

+0

在你的答案... form_for @user需要form_for:用户 – joshn 2010-01-26 03:18:01

相关问题