2011-01-28 31 views
0

我有一个Entry模型和一个照片模型,并且对于每张照片,用户可以提交一个“条目” - 只是关于照片的一些文本。在每张照片的展示页面上,我呈现了整个表单。在我entry.rb文件,我有以下数项的话:在Rails 3中不显示错误消息

validate :count_words 

def count_words 
    body_size = body.to_s.scan(/[\w-]+/).size 
    unless body_size < 300 
     errors.add(:entry, "Your entry is too long") 
    end 
end 

当我测试的条目超过300个字,保存失败和我的控制器重定向回他们一个页面。两个问题。当控制器重定向时,第一条错误消息不会显示出来。我有这个呈现W /表格(它是由脚手架产生的)。

<% if @entry.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@entry.errors.count, "error") %> prohibited this entry from being saved:</h2> 

     <ul> 
     <% @entry.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

这是控制器动作,在那里我怀疑问题在于:

def create 
    @entry = Entry.new(params[:entry]) 

    respond_to do |format| 
     if @entry.save 
     format.html { redirect_to(@entry, :notice => 'Your entry was submitted.') } 
     else 
     format.html { redirect_to :back } 
     end 
    end 
    end 

我不太清楚问题出在哪里。我打算在提交之前在表单上实施一些JavaScript验证,但我希望这可以作为备份。有人能告诉我我做错了什么吗?

回答

1

通常情况下,您希望您的else声明执行format.html { render :edit }而不是redirect :back

当您重定向时,错误不会持续(因为它们不会保存到数据库或会话中)。