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 %>
<%= link_to 'Cancel', nil, :class => 'cancel' %>
</div>
<% end %>
は、あなたのコントローラのコードを追加します。 –
コントローラを提供し、コードを表示してください..commentは実際には作成されませんが、アプリケーションは作成されていると言います。これはあなたの問題ですか?.. – rubyprince
これは正しいrubyprinceです。 –