Ruby on Rails - f.error_messages没有出现

Bri*_*tul 2 ruby-on-rails

我已经阅读了很多关于这个问题的帖子,但我从来没有这个工作过.

我的模型看起来像这样:

class Announcement < ActiveRecord::Base
    validates_presence_of :title, :description
end
Run Code Online (Sandbox Code Playgroud)

我的控制器的create方法(只有它的相关部分)如下所示:

def create
    respond_to do |format|
      if @announcement.save
        flash[:notice] = 'Announcement was successfully created.'
        format.html { redirect_to(@announcement) }
        format.xml  { render :xml => @announcement, :status => :created, :location => @announcement }
      else
        @announcement = Announcement.new
        @provinces = Province.all
        @types = AnnouncementType.all
        @categories = Tag.find_by_sql 'select * from tags  where parent_id=0 order by name asc'
        @subcategories= ''
        format.html { render :action => "new" } #new_announcement_path
        format.xml  { render :xml => @announcement.errors, :status => :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我的表单看起来像这样:

<% form_for(@announcement) do |f| %>
    <%= error_messages_for 'announcement' %> <!--I've also treid f.error_messages-->
...
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ton*_*not 5

您正在通过在else语句中创建新公告来查杀错误消息.

@announcement = Announcement.new # should be removed
Run Code Online (Sandbox Code Playgroud)

当你打电话时,@announcement.save它会存储错误@announcement.errors.通过@announcement = Announcement.new在此之后打电话,你将回到一个干净的名单.因此,不会显示任何错误.