2011-01-28 14 views
0

私はEntryモデルとPhotoモデルを持っています。各写真について、ユーザーは「エントリー」を提出することができます。各写真のショーページで、私はエントリーの完全なフォームをレンダリングします。私は300個の以上の単語があるエントリをテストする場合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 

、保存が失敗し、私のコントローラは、彼らが1だったページに戻ってリダイレクトします。私のentry.rbファイルでは、私はエントリの言葉をカウントするには、次のように持っています。 2つの問題。コントローラーのリダイレクト時に最初のエラーメッセージが表示されません。私はこれをフォームと一緒にレンダリングしました(それは足場によって生成されました)。

<% 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ステートメントにredirect :backではなくformat.html { render :edit }を実行したいと考えています。

リダイレクトすると、エラーは持続しません(データベースやセッションに保存されないため)。

関連する問題