Ruby on rails RoR-为表单字段显示单独的错误消息

Ruby on rails RoR-为表单字段显示单独的错误消息,ruby-on-rails,validation,forms,Ruby On Rails,Validation,Forms,如何在表单字段下方显示验证错误消息,而不是在页面顶部显示所有消息 我的Rails版本是Rails 3.0.0 我有一个带有字段id、标题和说明的表名类别。 我的模范班是 class Category < ActiveRecord::Base validates_uniqueness_of :title, :message => "Title already exist" validates_presence_of :title, :description => "Can

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

我的Rails版本是Rails 3.0.0

我有一个带有字段id、标题和说明的表名类别。 我的模范班是

class Category < ActiveRecord::Base
  validates_uniqueness_of :title, :message => "Title already exist"
  validates_presence_of :title, :description => "Cannot be blank"
end
类别“title已存在”的唯一性
验证是否存在:title,:description=>“不能为空”
结束
控制器

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
class CategoriesController'categories',:action=>'show',:id=>@category_last.id}
其他的
#format.html{redirect_to:controller=>'categories',:action=>'new'}
结束
结束
结束
def秀
结束
定义编辑
结束
结束
和视图

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

新类别
“创建“%”
标题
'') %>
标题
'') %>
“提交”,:类=>“提交”%>

您可能需要查看。里面有很多很棒的东西,而且很好地按字段出错。

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

def new
  @category = Category.new
end
<%= form_for @category, :action=>'create' do |f| %>
  <%= f.text_field(:title, :class=>'') %>
然后使用form_for代替form_标记,如下所示:

def new
  @category = Category.new
end
<%= form_for @category, :action=>'create' do |f| %>
  <%= f.text_field(:title, :class=>'') %>
这样,如果由于某种原因创建失败,控制器将为:new呈现模板,但仍将使用形式为_forhelper的失败@category对象。并且您始终可以使用@category.errors.on(:title)访问模型的错误消息

因此,将以下内容添加到要显示错误消息的视图中:

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


当我尝试
'create'do | f |%>
时,CategoriesController中出现了
运行时错误#新建:属性不能为空
抱歉,我这边有点输入错误。漏掉了一个逗号。当然,它应该是“create”do | f |%>现在我想起来了,您可能甚至不需要:action散列。尝试我已经纠正了该语法,实际上问题不在于标签的形式,而在于
@category=category.new
语句在控制器的新方法中,当我注释时,这一行错误不再显示。这里我错了什么?“@category=category.new”如果在model中定义的任何验证规则看起来非常奇怪,那么它就不起作用。ActiveRecord::Base的初始化方法不需要我知道的任何参数。您能从日志中确切地看到哪个类和方法实际抛出了错误吗?因为我现在能想到的唯一一件事是,如果你的分类模型中有某个东西在某种程度上对空记录不起作用。