2012-06-29 6 views
0

У меня есть приложение, где book_comments принадлежит к книгам.Ajax/Rails Вложенные комментарии

Мои маршруты файл:

resources :books do 
    resources :book_comments 
end 

У меня есть форма book_comment на show.html.erb для книг.

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 сохраняется, но моя про я проблема возникает, когда пытаюсь сделать с помощью AJAX в _book_comments частичного:

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

через: create.js.erb в папке book_comments

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

Подводя, у меня неприятность делает создание .js.erb в book_comments отобразить страницу книги. Почему бы не создать файл create.js.erb в папке book_comments, чтобы посмотреть на объекты в и сделать вывод, что новый комментарий к книге должен идти внутри 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 %> 
Смежные вопросы