Rails 3:“redirect_to”在Ajax调用后不能正常工作

时间:2011-05-01 13:35:19

标签: ruby-on-rails ajax ruby-on-rails-3

在我的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 个答案:

答案 0 :(得分:5)

Web浏览器希望在调用ajax后执行一些javascript。在浏览器中禁用javascript时,您的代码应该有效。

在add_new_message方法中,您应该添加:

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

然后将执行add_new_message.js.erb中的一些javascript,因此要重定向到索引,add_new_message.js.erb中的代码应如下所示:

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

虽然HTML和javascript都做同样的事情。为什么首先需要ajax?

答案 1 :(得分:2)

我很想在控制器中找到类似的东西:

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