Rails 3: "redirect_to" не работает хорошо после вызова Ajax - PullRequest
1 голос
/ 01 мая 2011

В моем приложении Rails 3 пользователь добавляет новое сообщение на форум, используя Ajax:

<%= form_tag("/forum/add_new_message", :remote => true) do %>
  <%= text_area_tag("new_message_area") %>
<% end %>

Вот код моего контроллера:

def index
  @messages = Message.all
end

def add_new_message
  Message.create(:text => params[:new_message_area], ...)                 
  redirect_to(:action => 'index')
end

Проблема в том, что после того, как пользователь добавляет новое сообщение, redirect_to(:action => 'index') выполняется, но страница не обновляется, т.е. я не вижу новое сообщение.

Почему?

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Веб-браузер ожидает выполнения некоторого javascript после вызова ajax. Ваш код должен работать, когда в браузере отключен JavaScript.

В методе add_new_message вы должны добавить:

respond_to do |format|
  format.html { redirect_to(:action => 'index') }
  format.js
end

Тогда будет выполнен некоторый javascript в add_new_message.js.erb, поэтому для перенаправления на индекс код в add_new_message.js.erb должен выглядеть следующим образом:

window.location = '<%= forums_path %>'; //or whatever other path

Хотя и HTML, и JavaScript делают одно и то же. Зачем вообще нужен ajax?

2 голосов
/ 20 апреля 2012

Я бы соблазнился пойти на что-то подобное в контроллере:

def index
  @messages = Message.all
end

def add_new_message
  Message.create(:text => params[:new_message_area], ...)                 
  render js: %(window.location.pathname='#{messages_path}')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...