2010-01-26 6 views
1

J'ai une application rails très basique. Je joue avec la validation.Pourquoi la validation simple de mes rails ne fonctionne-t-elle pas?

Contrôleur

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

Modèle

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

vues/pages/edit.html.erb

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

Tout ce que je veux faire est cliquez sur Créer quand je ne l'ai pas entré quoi que ce soit et ensuite avoir une validation venir et liste les champs requis. J'ai lu quelques tutoriels et ils le rendent si simple. Pourquoi je n'arrive pas à faire fonctionner ça? Qu'est-ce que je fais mal? Quand je crée un échafaudage alors cela fonctionne bien mais cela génère un scaffold.css dans public/stylesheets. W/out échafaud en ce moment je n'ai pas de feuille de style dans le dossier public.

Répondre

2

vous envoyez le formulaire à l'action "modifier", qui n'effectue aucun traitement. Vous avez besoin d'aller à la « créer » l'action, ce qui devrait ressembler à ceci:

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 

Votre ligne form_for peut être court et doux. , Vous devez également appeler error_messages pour obtenir la liste des erreurs générées automatiquement:

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

Il est important pour l'OP de comprendre que les nouvelles et créer travailler ensemble pour créer une nouvelle ressource (nouveau présente la forme, créez le mémorise à la base de données), et éditer et mettre à jour le travail ensemble de la même manière pour les ressources existantes. – Ben

+0

merci. Il me manquait le putain de f.error_messaages – joshn

+0

dans votre réponse ... form_for @user doit être form_for: user – joshn