Rails Ошибка отправки частичного через Javascript - PullRequest
2 голосов
/ 01 апреля 2011

У меня в контроллере следующий код:

Файл: app / controllers / photos_controller.rb

def show_snapshot_comments
    snapshot = Snapshot.find(params[:id])
    @photo = snapshot.photo
    comments = snapshot.comments.paginate :page => params[:page]
    @snapshot_comment = snapshot.comments.new
      respond_to do |format|
        format.js
      end
   end

JavaScript (jQuery): Файл: app / views / photos / show_snapshot_comments.js.erb

$j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
        :locals   => {:snapshot => snapshot, :comments => comments}) %>" );

show_snapshot_copmments вызывается из: приложение / просмотров / фото / show.html.erb

Кажется, он не работает.

Моя ошибка:

Рендеринг фотографий / show_snapshot_comments

ActionView::TemplateError (undefined local variable or method `snapshot' for #<ActionView::Base:0x2aaaaea473c8>) on line #2 of app/views/photos/show_snapshot_comments.js.erb:
1: $j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
2:         :locals   => {:snapshot => snapshot, :comments => comments}) %>" );

    app/views/photos/show_snapshot_comments.js.erb:2
    app/controllers/photos_controller.rb:227:in `show_snapshot_comments'

Есть идеи, что может происходить?

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Вы пытаетесь передать локальные переменные частичному «snapshot_comments». Однако эти две локальные переменные, снимок и комментарии не определены в текущей области (в представлении).

Если вы хотите передатьПеременные для просмотра из контроллера вы должны сделать следующее:

def show_snapshot_comments
    @snapshot = Snapshot.find(params[:id])
    @photo = snapshot.photo
    @comments = snapshot.comments.paginate :page => params[:page]
    @snapshot_comment = snapshot.comments.new
      respond_to do |format|
        format.js
      end
   end

$j('#info').append("<%= escape_javascript(render :partial  => "snapshot_comments",
        :locals   => {:snapshot => @snapshot, :comments => @comments}) %>" );

Попробуйте приведенный выше код и посмотрите, работает ли он. Я просто изменил снимок и комментарии на @snapshot и @ comments.

0 голосов
/ 01 апреля 2011

снимок установлен как локальная переменная в контроллере, поэтому шаблон его не видит. Установите его как переменную экземпляра:

@snapshot = Snapshot.find(params[:id])

затем в шаблоне:

:locals   => {:snapshot => @snapshot
...