我正在开发一个rails应用程序,其中我想用一个JSON对象响应ajax请求,该对象包含我通过查询数据库在Rails控制器中设置的实例变量,以及呈现的视图(带有没有模板)。我通过以下方式使用after_filter
来完成此任务:
after_filter :handle_ajax
def handle_ajax
respond_to do |format|
format.html
format.json do
data = {}
instance_variables.each {|iv| data[iv] = instance_variable_get(iv) }
data[:url] = request.path
#data[:html] = render_to_string :action => params[:action], :template => false
render :json => data
end
end
end
然而,当我使用它时,Rails会抱怨我正在调用render
两次(或者在这种情况下render
和render_to_string
)。这不是处理ajax请求的正确方法吗?我对Rails比较陌生,所以很可能这不是RoR的做法。
答案 0 :(得分:0)
其他控制器方法的可能性很可能也是自己渲染的。您只能调用一个渲染。控制器的其余部分是什么样的?
答案 1 :(得分:0)
Rails为每个动作自动渲染渲染,您可以尝试:
def index
@tracks = @artist.tracks.find(:all, :limit => 10)
render :nothing => true
end
编辑(我认为这不起作用):我会建议像:
def index
@tracks = @artist.tracks.find(:all, :limit => 10)
handle_ajax :tracks => @tracks
end
def handle_ajax data
respond_to do |format|
format.html
format.json do
data[:url] = request.path
render :json => data
end
end
端