2012-06-29 167 views
0

我有一个应用程序,其中book_comments belongs_to书籍。Ajax/Rails嵌套评论

我的路线文件:

resources :books do 
    resources :book_comments 
end 

我有show.html.erb的书籍book_comment形式。

def show 
    @book = Book.find(params[:id]) 
    @new_book_comment = @book.book_comments.build 
end 

我使用AJAX通过局部张贴book_comments书显示页面:_book_comment_form.html.erb:

<%= form_for([@book, @new_book_comment], remote: :true) do |f| %> 
    <div class="field" style="margin-top:60px;"> 
    <%= f.text_area :comment, rows: 3 %> 
    <%= f.submit "Add Comment" %> 
    </div> 
<% end %> 

当@new_book_comment被称之为是指book_comments_controller创建操作:

def create 
    @book = Book.find(params[:book_id]) 
    @book_comment = current_user.book_comments.build(params[:book_comment]) do |f| 
     f.book_id = @book.id 
    end 
if @book_comment.save 
     respond_to do |format| 
    format.html { redirect_to @book } 
    format.js { render :layout => false } 
    end 
end 

的book_comment被保存,但我的亲blem来试图通过AJAX呈现在_book_comments部分时:

<div id="comments"> 
<% @book_comments.each do |book_comment| %> 
    <%= render 'comment', :book_comment => comment %> 
    </div> 
<% end %> 
</div> 

通过:在book_comments文件夹

$("div#comments").append("<%= escape_javascript(render('books/comment'))%>") 

综上所述create.js.erb,我无法使创建book_comments中的.js.erb呈现到书籍展示页面。为什么book_comments文件夹中的create.js.erb不知道要查看对象中的对象,并推断新书评论应该放在div中?

我的错误信息:

undefined method `comment' for nil:NilClass 

不understnd原因。看到我将实例变量传递给部分注释。

回答

0

你的部分做错了。您将未引用的值(注释)传递给未使用的变量(book_comment)。

相反的:

<% @book_comments.each do |book_comment| %> 
    <%= render 'comment', :book_comment => comment %> .... 

你应该做的:

<% @book_comments.each do |book_comment| %> 
    <%= render 'comment', :comment => book_comment %>