Rails多次渲染调用ajax请求

时间:2011-12-11 22:47:43

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

我正在开发一个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两次(或者在这种情况下renderrender_to_string)。这不是处理ajax请求的正确方法吗?我对Rails比较陌生,所以很可能这不是RoR的做法。

2 个答案:

答案 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