2011-08-17 21 views
2

私は単純なコメントモデルとコントローラを持っています。アプリケーションでコメントを作成すると、割り当てられた検証はチェックされません。検証問題

これは私のコメントのモデルである:コンソールでコメントを作成する際に

class Comment < ActiveRecord::Base 
    belongs_to :post 

    validates_presence_of :commenter 
    validates_presence_of :body 
end 

ここに私の出力です:

>> comment = Comment.new 
=> #<Comment id: nil, commenter: nil, body: nil, post_id: nil, email: nil, created_at: nil, updated_at: nil> 
>> comment.save 
=> false 
>> comment.errors 
=> #<OrderedHash {:body=>["can't be blank"], :commenter=>["can't be blank"]}> 

すべてが素晴らしく見えます。 しかし、アプリケーションの中に空白のコメントを作成すると、それは正常に作成されたと言われ、実際にはコメントを作成しないということだけです。

これは、ログに記録するものである:

Started POST "/posts/19/comments" for 127.0.0.1 at Tue Aug 16 23:10:26 -0400 2011 
Processing by CommentsController#create as HTML 
Parameters: {"comment"=>{"body"=>"", "commenter"=>"", "email"=>""}, "commit"=>"Create Comment", "authenticity_token"=>"V/EinZAi2NNYx7AokikTpQFkNtADNiauW5vcNGdhTug=", "utf8"=>"\342\234\223", "post_id"=>"19"} 
Post Load (0.1ms) SELECT "posts".* FROM "posts" WHERE "posts"."id" = 19 LIMIT 1 
Redirected to http://localhost:3000/posts 
Completed 302 Found in 23ms 

この上の任意の考え?私は実際のフォームコードを追加することもできます。

UPDATE コントローラーコード:

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(params[:comment]) 
    flash[:notice] = "Your comment has been saved." 
    redirect_to (:back) 
    end 
end 

UPDATE ビューコード:手動でエラーがあるかどうかを確認し、それらを表示する必要が

<%= form_for([post, post.comments.build]) do |f| %> 
       <div class="field"> 
       <h4><%= f.label :name %></h4> 
       <%= f.text_field :commenter %> 
       </div> 
       <div class="field"> 
       <h4><%= f.label :email_address %></h4> 
       <%= f.text_field :email %> 
       </div> 
       <div class="field"> 
       <h4><%= f.label :body %></h4> 
       <%= f.text_area :body %> 
       </div> 
       <div class="actions"> 
       <%= f.submit %>&nbsp; 
       <%= link_to 'Cancel', nil, :class => 'cancel' %> 
       </div> 
      <% end %> 
+0

は、あなたのコントローラのコードを追加します。 –

+0

コントローラを提供し、コードを表示してください..commentは実際には作成されませんが、アプリケーションは作成されていると言います。これはあなたの問題ですか?.. – rubyprince

+0

これは正しいrubyprinceです。 –

答えて

2

。これは何とか魔法のように起こるわけではありません。

あなたは、このようなあなたのコントローラのアクションを変更する必要があります。

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.build(params[:comment]) 

    if @comment.save 
     flash[:notice] = "Your comment has been saved." 
     redirect_to (:back) 
    else 
     render 'new' 
    end 
    end 
end 

あなたはこのようなあなたのビューでのエラー表示することができます:

<%= f.error_messages %>