ギャラリーに写真があります(PhotosController)。私はすべての写真にコメントを追加したいと思います。写真のステートメントには、新しいコメントを追加するためのコメント+フォームのレンダリングのための部分を追加しました。Rails 3 - パーシャルとエラー "未定義のローカル変数またはメソッド"
ビュー/写真:
**NameError (undefined local variable or method `photo' for #<CommentsController:0x00000100ce0ad0>)**:
これは私のコードをどのように見えるかです:
私の問題は、私は新しいコメントでフォームを送信するときに、私は、レンダリングエラーが発生しますこと、です/index.html.erb
<%= render @photos %>
ビュー/写真/ _photo.html.erb
<div><%=image_tag photo.photo.url(:thumb)%></div>
<div class="comments_to_photo">
<%= render :partial => 'photos/photo_comments', :locals => { :photo => photo }%>
</div>
写真/ photo_comments
<%photo.comments.each do |cmnt|%>
<div><%=cmnt.comment%></div>
<%end%>
<%=form_tag comment_path, :remote => true do %>
<div><%=text_area_tag 'comment[comment]'%></div>
<%=submit_tag%>
<%end%>
コントローラ/ CommentsController
def create
@comment = Comment.new(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to @comment, notice: 'Comment was successfully created.' }
format.js {
render :partial => '/photos/photo_comments', :locals => { :photo => photo } do |page|; page << "$(this).html('abcde');" end
}
else
format.html { render action: "new" }
format.js
end
end
end
私は、コメントを追加しました写真、形やコメント文をリフレッシュしたいと思います。誰も私を助けてください、上記のエラーを回避する方法を教えてください?
は、事前にありがとう編集:私はAJAXを通じてリフレッシュコメントにファイル_photo_comments.js.erb追加:
$('#photo_comment').html("<%= escape_javascript(render('photos/photo_comments')) %>");
をそして、私はエラーを取得する
ActionView::Template::Error (stack level too deep):
activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:23
この行数:
Rendered photos/_photo_comments.js.erb (562.2ms)
と最後のレンダリングと間違って何
Completed 500 Internal Server Error in 580ms
?私は部分的なJSファイルから部分的なHTMLファイルをレンダリングできないのですか?
ありがとう、これは私の問題を解決します。コメントの文をAJAXでレンダリングしようとしましたが、「スタックレベルが深すぎます」というエラーが表示されました。忘れてしまったことはありますか? (私は私の質問を更新しました)。ありがとう – user984621