ブログエンジンを書くので、投稿、コメントリスト、コメントフォームを表示する投稿ビュー(show.html.erb)があります。他のコントローラから呼び出されたフォームを検証する
私は、フォームをこのように呼ん:
<%= render :partial => 'comments/form', :locals => {:comment => @post.comments.new} %>
イムない確実な方法は正しいですが、少なくとも私は新しいコメントのpost_idのを得ることをコメントを渡す場合。
<%= form_for comment, :action => "create" do |f| %>
<% if comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being added:</h2>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :post_id %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :url %>
<%= f.text_field :url %>
</p>
<p>
<%= f.label :content %>
<%= f.text_area :content %>
</p>
<p class="no-border">
<%= f.submit "Post", :class => "button" %>
</p>
<% end %>
そして、このアクション:
これは私のフォームは、(コメントのビューで_form.html.erb)である
def create
@comment = Comment.new(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to :back }
else
format.html { redirect_to :back }
end
end
end
少し冗長が、私はより多くのものを追加したいです。
コメントを完全に追加できますが、検証エラーは表示されません。
私は(私のモデルは、検証のものを持っている)すべて空白のままに、私はで作成したコメントがエラーを持っているし、他のパスに行くアクションを作成することを参照してください。
ただし、フォームにエラーは表示されません。
私はerorrsとオブジェクトを持っていると思いますが、私が戻ってリダイレクトすると、フォームに渡すオブジェクトは再び新しいものになり、エラーは発生しません。
だからどこに問題がありますか?
EDIT:余分なもの:
イム私のshow.html.erb私もこの(フォームの前に)持っている:ショーアクションで、私は余分を置くとき、そう
<ol class="commentlist">
<%= render @post.comments %>
</ol>
を変数:
def show
@post = Post.find(params[:id])
@comment = @post.comments.new
レンダリングも空のコメントをレンダリングして例外を作成すると思われます。
これを回避するにはどうすればよいですか?
恐ろしい答えです。私は別の質問があります。 createメソッド内に@postを作成する必要がある場合は、投稿IDが必要です。そのIDは作成する要求のどこかにありますか? –
あなたのルートをネストしたと仮定すると、 '' 'params [:post_id]' ''を使ってアクセスする必要があります。 '' 'rake routes'''をチェックして、あなたのコメントのパスが' '' posts/1/comments''のように投稿の下に入れ子になっていることを確認してください。 –
Nop、これは私の最初のプロジェクトです。しかし、私はそれを研究します。 Otoh、私は前にコメントするのを忘れてしまったあなたの解決策に別の問題があるので、質問を更新しました。 –