2010-11-19 14 views
1

Sayfanın üst kısmındaki tüm iletileri göstermek yerine, form alanı altındaki doğrulama hata mesajlarını nasıl görüntüleyebilirim.RoR - form alanları için ayrı hata mesajı görüntüleme

Benim Raylar sürüm Raylar 3.0.0

Ben alanlar id, başlık ve açıklama içeren bir tablo adı kategoriye sahip olduğunu. Benim modelim sınıf Kontrolör

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 

ve Görünüm

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

cevap

2

Muhtemelen böyle bir şey yapardım. Bu gibi yeni:

def new 
    @category = Category.new 
end 

Ve sonra yerine böyle form_tag ait form_for kullanın: eylem boş modeli kullanın

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

Sonra eylemde: Bunu denemek istiyorum oluşturun:

if @category.save 
    # redirect if you want to 
else 
    render :action => :new 
end 

Bu şekilde, oluşturma işlemi bir nedenden ötürü başarısız olursa, denetleyici şu şekilde şablon oluşturur: yeni ama yine de form_for yardımcısında başarısız @kategori nesnesini kullanır. Görüntülenen hata mesajını istediğiniz görünüme aşağıdaki

Yani ekleyin: (başlık): Ve hep @ category.errors.on bir modelin hata iletileri erişebilirsiniz

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

denedim '<% = form_for @category: action => 'oluştur' do | f | %> '' runtimeError'ı CategoriesController'da # alıyorum: new: öznitelikleri boş bırakılamaz ' –

+0

Üzgünüm, yanımdan biraz yazım hatası. Bir virgül kaçırdım. Tabii ki <% = form_for @kategori olmalı,: action => 'create' do | f | %> Ve şimdi bunu düşündüğümde, muhtemelen buna bile gerek yok: aksiyon karması. <% = Form_for @category do | f | 'yı deneyin. %> – DanneManne

+0

zaten sözdizimi, aslında sorunun form_for etiketiyle değil, bu satır hatalarını görüntülemediğimde denetleyicideki yeni yöntemde '@ category = Category.new' ifadesiyle düzeltildiğini zaten düzelttim . Burada neyim var? –

1

Sen formtastic içine bakmak isteyebilirsiniz

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

olduğunu. Orada müthiş şeyler çok ve alan çok güzel hata yapar.

İlgili konular