0

私は michale hartl による Rails チュートリアルに従いました。それを拡張したかったので、thumbs_up gem を統合しようとしました。投稿とコメントの両方に投票できるようになり、とても誇りに思いました。しかし、その後、UI に少し取り組みたいと思いました。新しいコメントを追加するためのすべてのフォームが、投稿に添付されたコメントのフィードの下にあるのが気に入らなかった. だから私がしなければならなかったのは、パーシャルの順序を変更することだけだと思った

これから

<%= render partial: 'comments/comment', collection: my_item.comments, as: :comment %>
<%= render :partial => "comments/form", :locals => { :cur_post => my_item } %>

これに

<%= render :partial => "comments/form", :locals => { :cur_post => my_item } %>
<%= render partial: 'comments/comment', collection: my_item.comments, as: :comment %>

そしてそれはうまくいくでしょう。しかし、残念ながらそうではありませんでした。それらを並べ替えると、このエラーが発生します。

No route matches {:action=>"vote_up", :controller=>"comments", :id=>#<Comment id: nil, content: nil, user_id: nil, post_id: 14, created_at: nil, updated_at: nil>}

部分的なものを削除することができ、すべてが機能するので、コメントの上にフォームがあるとエラーが発生する理由がわかりません。

ここに要点へのリンクがあります

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

問題は私が信じているこの行から来ています

<%= form_for([cur_post, cur_post.comments.build]) do |f| %>

これが最初に発生すると、cur_post.comments に新しいコメントが作成されます。「コメント/コメント」をレンダリングすると、新しく作成されたコメントが保存されないという問題が発生します。モデルを次のように url ヘルパーに渡すと、Rails は期待します。

vote_up_comment_path(comment)

オブジェクトがデータベースにあること(AFAIK)

commentsアソシエーションに組み込まないことで、これを回避できるはずです

<%= form_for([cur_post, Comment.new]) do |f| %>

それ以外の場合は、コメント/コメントで が true かどうかを確認しcomment.new_record?、それに応じて対処できます。

于 2012-10-01T23:34:49.030 に答える