REST客户端回调:如何判断项目何时加载?

时间:2015-06-03 21:22:28

标签: ruby-on-rails ruby ajax rest rest-client

我正在尝试使用REST ClientDelayedJob从此外部API加载一些项目。

但是,与Ajax check for database change using route不同,这些项目不会保存到数据库中,而是直接进入视图 - 所以我怎么知道它们何时完成加载所以我可以将它们加载到客户端使用Ajax?

您可以即时投放的实时应用http://runnable.com/VW9rQx-KiIFfmpII/ajax-affiliates

应用/控制器/ main_controller.rb

class MainController < ApplicationController
  def index
    # Delay fetching
    @products = Affiliate.delay.fetch
  end

  # Pseudo-code from SO `ajax-check-for-database-change-using-route`
  #
  # def check_items_loaded
  #   @items_status = Affiliate.find(params[:id]).items_loaded
  #   respond_to do |wants|
  #     wants.js
  #   end
  # end
end

配置/ routes.rb中

# Pseudo-code from SO `ajax-check-for-database-change-using-route`
# get '/check_items_loaded/:id', to: 'photos#check_items_loaded', as: :check_items_loaded

应用/模型/ affiliate.rb

require "rest_client"

module Affiliate
  def self.fetch
    response = RestClient::Request.execute(
      :method => :get,
      :url => "http://api.shopstyle.com/api/v2/products?pid=uid7849-6112293-28&fts=women&offset=0&limit=10"
    )

    @products = JSON.parse(response)["products"].map do |product|
      product = OpenStruct.new(product)
      product
    end
  end

 # More pseudo-code
 # Add `items_loaded` boolean to database?
 # private
 #   def set_items_loaded
 #     self.update_attributes(items_loaded: ???)
 #   end
end

2 个答案:

答案 0 :(得分:1)

您可以使用PubNub [1]或Pusher [2]

之类的东西来查看pub-sub架构

您的前端会订阅这些端点,然后您可以让后端向这些端点发布事件(然后从消费者(您的前端)读取)

[1] PubNub - http://www.pubnub.com/

[2] Pusher - https://pusher.com/

答案 1 :(得分:0)

您可以使用ActionController::Streaming破解解决方案。请考虑潜在的会话瓶颈。

另一种解决方案可能是使用Websockets&amp; Redis的。