2010-11-19 8 views
1

Wie kann ich die Fehlermeldungen unterhalb des Formularfelds anzeigen, anstatt alle Meldungen oben auf der Seite anzuzeigen?RoR - Anzeige separater Fehlermeldungen für Formularfelder

Meine Rails-Version ist Rails 3.0.0

ich einen Tabellennamen Kategorie mit den Feldern ID, Titel und Beschreibung. Meine Modellklasse ist

class Category < ActiveRecord::Base 
    validates_uniqueness_of :title, :message => "Title already exist" 
    validates_presence_of :title, :description => "Cannot be blank" 
end 

-Controller

class CategoriesController < ApplicationController 

    def index 
    end 

    def new 
    end 

    def create 
    @category = Category.new(params[:category]) 
    @category.created = Time.now 
    @category.modified = Time.now 
    respond_to do |format| 
     if @category.save 
     @category_last=Category.last 
      format.html { redirect_to :controller => 'categories', :action => 'show', :id => @category_last.id } 
     else 
      #format.html { redirect_to :controller => 'categories', :action => 'new' } 
     end 
    end 
    end 

    def show 
    end 

    def edit 
    end 

end 

und anzeigen

<div id="newCategory" class='page add'> 
    <div class='screenTitle'>New Category</div> 
    <div class='form_wrapper'> 
     <%= form_tag :action=>'create' %> 
      <div class='field_wrapper'> 
       <div class='field_label'> 
        Title 
       </div> 
       <div class='field_input'> 
        <%= text_area(:category, :description, :class=>'') %> 
       </div> 
       <div class='clearfix'>&nbsp;</div> 
      </div> 
      <div class='field_wrapper'> 
       <div class='field_label'> 
        Title 
       </div> 
       <div class='field_input'> 
        <%= text_field(:category, :title, :class=>'') %> 
       </div> 
       <div class='clearfix'>&nbsp;</div> 
      </div> 
      <div class='field_wrapper'> 
       <div class='field_submit'> 
        <%= submit_tag "Submit", :type => "submit", :class => "submit" %> 
       </div> 
       <div class='clearfix'>&nbsp;</div> 
      </div> 
     </form> 
    </div> 
    <div class='actions'> 
     <ul> 
      <li><%= link_to 'List Categoris', root_url+'categories' %></li> 
     </ul> 
     <div class='clearfix'>&nbsp;</div> 
    </div> 
</div> 

Antwort

2

Ich würde wahrscheinlich so etwas tun. Verwenden Sie ein leeres Modell in Aktion: wie folgt aus:

def new 
    @category = Category.new 
end 

Und dann verwenden form_for statt form_tag wie folgt aus:

<%= form_for @category, :action=>'create' do |f| %> 
    <%= f.text_field(:title, :class=>'') %> 

Und dann in der Aktion: create Ich würde versuchen, diese:

Auf diese Weise, wenn die Erstellung aus irgendeinem Grund fehlschlägt, wird der Controller die Vorlage für: neu, aber immer noch das fehlgeschlagene @ Kategorie Objekt in der Form_for Helfer rendern. Und Sie können immer die Fehlermeldungen zugreifen ein Modell mit @ category.errors.on (: title)

So fügen Sie folgendes zu der Ansicht, in der Sie die Fehlermeldung angezeigt mögen:

<%= @category.errors.on(:title) unless @category.errors.on(:title).nil? %> 
+0

Als ich versuchte, '<% = form_for @category: action => 'create' do | f | %> 'Ich bekomme' RuntimeError in CategoriesController # Neu: Attribute können nicht leer sein' –

+0

Sorry, ein kleiner Tippfehler von meiner Seite. Verpasste ein Komma. Es sollte natürlich <% = form_for @category,: action => 'create' do | f | sein %> Und jetzt, wo ich darüber nachdenke, brauchst du wahrscheinlich nicht einmal den Action-Hash. Probieren Sie <% = form_for @category do | f | %> – DanneManne

+0

Ich habe diese Syntax bereits korrigiert, eigentlich ist das Problem nicht mit dem form_for -Tag, sondern mit der '@category = Category.new'-Anweisung in der neuen Methode im Controller, wenn ich diesen Zeilenfehler kommentiere, wird dieser Zeilenfehler nicht mehr angezeigt . Was ich falsch liege ..? –

1

Sie könnten in formtastic suchen. Viele tolle Sachen drin und Fehler von Feld sehr schön.

Verwandte Themen