2012-02-13 23 views
1

ギャラリーに写真があります(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ファイルをレンダリングできないのですか?

答えて

3

あなたが持っているあなたのコントローラで:

:locals => { :photo => photo } 

が、変数photoが存在しません。

:locals => { :photo => @comment.photo } 
+0

ありがとう、これは私の問題を解決します。コメントの文をAJAXでレンダリングしようとしましたが、「スタックレベルが深すぎます」というエラーが表示されました。忘れてしまったことはありますか? (私は私の質問を更新しました)。ありがとう – user984621

0

image_tag photo.photo.url(:thumb) < - それはあなたが持っているものですかphoto.photo

+0

はい、私はテーブルにあるので**写真**は列です** photo_file_name **、** photo_content_type ** - これは正しく、画像は正しく表示されますが、 AJAXでパーシャルをレンダリングしたい、上記のエラーが発生しています... – user984621

関連する問題