2011-01-28 57 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

當您重定向時,錯誤不會持續(因爲它們不會保存到數據庫或會話中)。