2012-06-29 134 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 %>