response_to изменить тип ответа - PullRequest
1 голос
/ 19 июля 2010

Я вызываю действие create контроллера через ajax, поэтому, когда объект успешно сохраняется, запускается ответ js.Тем не менее, если объект не удается сохранить из-за проверки, то я хочу, чтобы ответ был HTML.Я надеюсь добиться этого, не возвращая ответ js в блоке else (см. Код ниже), но это приводит к ошибке 406 Not Acceptable .

Любые идеио том, как это сделать?

Я также, вероятно, должен отметить, что причина, по которой я хочу это сделать, заключается в том, что я не уверен, как создать соответствующий ответ js, если проверка не удалась ...

Заранее спасибо!!!=]

Действие создания контроллера

respond_to do |format|
  if @person.save
    flash[:notice] = 'Successfully created.'
    format.html { redirect_to(@person) }
    format.js
  else
    flash[:error] = 'There are errors while trying to create a new Person'
    format.html { render :action => "new" }
  end
end

1 Ответ

1 голос
/ 19 июля 2010

Если вы специально запрашиваете формат js в URL, то вы должны предоставить JS для своего ответа. Вместо этого можно было бы не указывать формат в запросе, а затем просто отфильтровать ответы по xhr. Вот так:

respond_to do |format|
  if @person.save
    flash[:notice] = 'Successfully created.'
    if request.xhr?
      format.js
    end
    format.html { redirect_to(@person) }
  else
    flash[:error] = 'There are errors while trying to create a new Person'
    format.html { render :action => "new" }
  end
end

Таким образом, если вы сделаете запрос без указания ЛЮБОГО формата, он сначала нажмет на js, ЕСЛИ это запрос xhr (т. Е. Запрос AJAX), тогда как при возникновении ошибки он вернет html, независимо от того, что.

Имеет ли это смысл?

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