0

我有一个应用程序,其中 book_comments 属于书籍。

我的路线文件:

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 已保存,但在尝试通过 _book_comments 部分中的 ajax 渲染时出现了我的问题:

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

通过:book_comments 文件夹中的 create.js.erb

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

总而言之,我无法将 book_comments 中的 create.js.erb 渲染到图书展示页面。为什么 book_comments 文件夹中的 create.js.erb 不知道查看 中的对象并推断新的书评应该放在 div 中?

我的错误信息:

undefined method `comment' for nil:NilClass  

不明白为什么。看到我将实例变量传递给注释部分。

4

1 回答 1

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  %>
于 2012-06-30T11:02:44.977 回答