Rails 3 - рендеринг партиалов и ошибка "неопределенная локальная переменная или метод" - PullRequest
1 голос
/ 13 февраля 2012

У меня есть фотографии в галерее ( PhotosController ), и я хочу добавить к каждой фотографии комментарии. В утверждение о фотографиях я добавил партиал для отрисовки комментариев + форму для добавления нового комментария.

Моя проблема в том, что когда я отправляю форму с новым комментарием, я получаю ошибку рендеринга:

**NameError (undefined local variable or method `photo' for #<CommentsController:0x00000100ce0ad0>)**:

Вот так выглядит мой код:

просмотры / фото / index.html.erb

<%= render @photos %>

просмотров / фотографии / _photo.html.erb

<div><%=image_tag photo.photo.url(:thumb)%></div>
<div class="comments_to_photo">
  <%= render :partial => 'photos/photo_comments', :locals => { :photo => photo }%>
</div>

фото / photo_comments

<%photo.comments.each do |cmnt|%>
  <div><%=cmnt.comment%></div>
<%end%> 

<%=form_tag comment_path, :remote => true do %>
  <div><%=text_area_tag 'comment[comment]'%></div>
  <%=submit_tag%>
<%end%>

Контроллеры / CommentsController

  def create
    @comment = Comment.new(params[:comment])

    respond_to do |format|
      if @comment.save
        format.html { redirect_to @comment, notice: 'Comment was successfully created.' }
        format.js {
          render :partial => '/photos/photo_comments', :locals => { :photo => photo } do |page|; page << "$(this).html('abcde');" end  
        }
      else
        format.html { render action: "new" }
        format.js
      end
    end
  end

Я бы хотел обновить форму и комментарий к заявлению на фото, где был добавлен комментарий. Может ли кто-нибудь помочь мне, пожалуйста, как избежать ошибки выше?

Заранее спасибо

РЕДАКТИРОВАТЬ: Я добавил для обновления комментариев через AJAX файл _photo_comments.js.erb :

$('#photo_comment').html("<%= escape_javascript(render('photos/photo_comments')) %>");

И я получаю ошибку

ActionView::Template::Error (stack level too deep):
  activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:23

с десятками этой строки:

  Rendered photos/_photo_comments.js.erb (562.2ms)

и последний

Completed 500 Internal Server Error in 580ms

Что не так с рендерингом? Я не могу отобразить частичный HTML-файл из частичного файла JS?

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

В вашем контроллере у вас есть:

:locals => { :photo => photo }

, но переменная photo там не существует.Должно быть:

:locals => { :photo => @comment.photo }
0 голосов
/ 13 февраля 2012

image_tag photo.photo.url(:thumb) <- Это то, что вы хотите иметь <code>photo.photo?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...