【问题标题】:Rails render partial with JSON objectRails 使用 JSON 对象渲染部分内容
【发布时间】:2015-11-28 05:48:03
【问题描述】:

在我的 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 实例,然后将该对象渲染到部分中。

"&lt;%= escape_javascript(render @post) %&gt;" 在 create.js.erb 中

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

【问题讨论】:

  • 通常为此,您最初会渲染出使用@post 对象的部分内容。然后,您可以使用 params 中的数据更新帖子,然后执行 render :partial =&gt; "posts/my_partial", :locals =&gt; {:post =&gt; @post} 或类似的操作。

标签: javascript ruby-on-rails ruby ajax


【解决方案1】:

我能够通过将部分呈现为 json 对象内的 HTML 字符串来使其工作,类似于在这个问题中所做的事情: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);

很好,很干净。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2018-10-16
    • 1970-01-01
    • 2014-07-10
    • 2023-03-13
    • 2017-04-20
    相关资源
    最近更新 更多