代码之家  ›  专栏  ›  技术社区  ›  Mithun Sreedharan Kuldeep Modi

RoR-显示窗体字段的单独错误消息

  •  1
  • Mithun Sreedharan Kuldeep Modi  · 技术社区  · 14 年前

    如何在表单字段下方显示验证错误消息,而不是在页面顶部显示所有消息。

    我的Rails版本是 轨道3.0.0

    我有一个表名类别,包含id、title和description字段。 我的模特班是

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

    控制器

    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
    

    和视图

    <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>
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   DanneManne    14 年前

    我可能会做这样的事。在action:new中使用空模型,如下所示:

    def new
      @category = Category.new
    end
    

    然后使用form_for代替form_标记,如下所示:

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

    然后在“操作:创建”中,我将尝试:

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

    这样,如果由于某种原因创建失败,控制器将呈现:new的模板,但仍然使用helper表单中的failed@category对象。并且您始终可以使用@category.errors.on(:title)访问模型的错误消息

    因此,在希望显示错误消息的视图中添加以下内容:

    <%= @category.errors.on(:title) unless @category.errors.on(:title).nil? %>
    
        2
  •  1
  •   re5et    14 年前

    你可能想调查一下 formtastic . 里面有很多很棒的东西,每个领域都很好地出错。