我已经阅读了很多关于这个问题的帖子,但我从来没有这个工作过.
我的模型看起来像这样:
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)
我究竟做错了什么?
您正在通过在else语句中创建新公告来查杀错误消息.
@announcement = Announcement.new # should be removed
Run Code Online (Sandbox Code Playgroud)
当你打电话时,@announcement.save它会存储错误@announcement.errors.通过@announcement = Announcement.new在此之后打电话,你将回到一个干净的名单.因此,不会显示任何错误.