在我的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')
已执行,但页面未刷新,即我没有看到新邮件。
为什么?
答案 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