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

相關問題