Rails使用JSON对象呈现部分

时间:2015-09-02 16:01:01

标签: javascript ruby-on-rails ruby ajax

在我的rails应用程序中,我创建了一个javascript回调函数,用于轮询处理端点以检查图像是否已完成处理,然后像这样更新视图:

create.js.erb 创建回调

// start polling for processed image
function imageProcessed() {
  $.ajax({ url: "/posts/" + <%= @post.id %> + "/processing"})
    .done(function(data) {
      if (data.processing) {
        setTimeout(imageProcessed(), 2000);
      } else {
        // append image url when processed
        $("#js-capture-container").html('<img src="' + data.image_url + '" alt="image">');
      }
    });
}

imageProcessed();

posts_controller.rb 端点

def processing
  data = { processing: @post.image_processing }
  if !@post.image_processing?
    data[:image_url] = @post.image_url(:pair)
  end
  render json: data
end

这样可以正常工作,但我想获取ajax中返回的数据,并使用此数据渲染已存在的_post.html.erb部分。

返回@post的更新实例,然后将该对象渲染为部分内容。

create.js.erb

中的

"<%= escape_javascript(render @post) %>"

任何想法都会有很大帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

我能够通过将partial作为一个HTML字符串呈现在json对象中来实现它,类似于在这个问题中所执行的操作:rails 3 - How to render a PARTIAL as a Json response

我将 post_controller.rb 中的if语句更改为:

if !@post.image_processing?
  data[:partial] = render_to_string(@post)
end

然后在 create.js.erb 中将回调更改为:

$("#js-capture-container").html(data.partial);

非常好,非常干净。