这是我的控制器(ClientController):
class ClientController < ApplicationController
layout 'application'
before_filter :client_selected, :only => [ :index,:show]
after_filter :reload_page, :only => :update
def reload_page
respond_to do |format|
format.html {redirect_to :controller=>"client", :action=>"show", :layout => 'application'}
format.js {render inline: "location.reload();" }
end
def index
end
def show
end
end
不知道我在这里缺少什么?
答案 0 :(得分:1)
您需要我们展示与此相关的观点。当数据库记录改变时,控制器不会神奇地“触发”,它只处理来自浏览器的传入请求。你有一些定期打电话的JavaScript吗?
你的defs不应该在def reload_page
内。
编辑:此外,您可能根本不需要使用某些after_filter
,只需进行is_update_necessary
操作并像其他任何一样调用它。
答案 1 :(得分:0)
正如@ roman-roman所提到的,你在重载页面方法中有你的索引和显示视图......我非常怀疑你打算做什么。
您不必调用方法来使页面在更新时重新加载。如果您要从编辑页面向更新操作提交表单,则页面将在保存后自然重新加载。
典型的更新操作如下所示:
@name_of_model = NameOfModel.find(params[:id])
respond_to do |format|
if @name_of_model.update_attributes(name_of_model_params)
# whatever the formats you want: but rendering html will include a refresh
end
摆脱重新加载页面,从reload_page中取出那些方法并从那里开始。只需重新加载页面即可。
如果您需要重新加载bc,请使用ajax进行更新...在javascript中的成功或.done函数中执行此操作。