Rails несколько вызовов рендеринга для запросов AJAX - PullRequest
1 голос
/ 12 декабря 2011

Я работаю над приложением rails, в котором я хочу отвечать на запросы ajax с помощью объекта JSON, который содержит как переменные экземпляра, которые я установил в контроллерах Rails, путем запроса к базе данных, так и визуализированное представление (с без шаблона). Я использую after_filter следующим образом:

after_filter :handle_ajax
def handle_ajax

  respond_to do |format|

    format.html
    format.json do
      data = {}

      instance_variables.each {|iv| data[iv] = instance_variable_get(iv) }
      data[:url] = request.path
      #data[:html] = render_to_string :action => params[:action], :template => false

      render :json => data
    end

  end

end

Однако Rails жалуется, когда я использую это, что я звоню render дважды (или в этом случае render и render_to_string). Разве это не правильный способ обработки AJAX-запроса? Я относительно новичок в Rails, поэтому вполне возможно, что это просто не RoR способ делать вещи.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Rails-вызовы отображаются автоматически для каждого действия, вы можете попробовать:

def index
  @tracks = @artist.tracks.find(:all, :limit => 10)
  render :nothing => true
end

РЕДАКТИРОВАТЬ (на самом деле я не думаю, что это работает): я бы порекомендовал что-то вроде:

def index
  @tracks = @artist.tracks.find(:all, :limit => 10)
  handle_ajax :tracks => @tracks
end


def handle_ajax data
  respond_to do |format|

    format.html
    format.json do
      data[:url] = request.path

      render :json => data
    end
end

конец

0 голосов
/ 12 декабря 2011

Скорее всего, остальные ваши методы контроллеров также отрисовывают свои собственные. Вы можете использовать только один рендер. Как выглядит остальная часть вашего контроллера?

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