我正在尝试使用REST Client和DelayedJob从此外部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
答案 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的。