0

book_commentsがbooks_toに属するアプリケーションがあります。

私のルートファイル:

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_controllercreateアクションを参照します。

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 に答える