Ruby on rails 使用rails或ember从外部api缓存数据?

Ruby on rails 使用rails或ember从外部api缓存数据?,ruby-on-rails,api,postgresql,caching,ember.js,Ruby On Rails,Api,Postgresql,Caching,Ember.js,我有一个ember/rails应用程序,它有三个主要模板:主页、联系人和付款。联系人和付款模板都需要一组联系人。此阵列需要从外部api填充。目前,对于联系人,每次我访问此模板时,都会命中外部api。理想情况下,我希望在用户首次登录时异步访问api,获取此数据一次,并在必要时无需访问外部api即可将其引用回来 使用rails,我可以轻松地为用户添加has_one:contacts_列表,并在切换模板时根据需要有条件地刷新该列表。我很想知道在ember中处理这个问题的最佳方法。我在路由上使用了set

我有一个ember/rails应用程序,它有三个主要模板:主页、联系人和付款。联系人和付款模板都需要一组联系人。此阵列需要从外部api填充。目前,对于联系人,每次我访问此模板时,都会命中外部api。理想情况下,我希望在用户首次登录时异步访问api,获取此数据一次,并在必要时无需访问外部api即可将其引用回来


使用rails,我可以轻松地为用户添加has_one:contacts_列表,并在切换模板时根据需要有条件地刷新该列表。我很想知道在ember中处理这个问题的最佳方法。

我在路由上使用了
setupController
方法来进行这种类型的缓存。只需检查内容是否已经可用,并仅在不存在时加载。大概是这样的:

App.ContactsRoute = Ember.Route.extend({
  setupController : function(controller,model){
    if(!controller.get('content')){
      this.store.find('contact').then(function(contacts){
        controller.set('content',contacts)
      });
    }
  }
});

你应该为“联系人”创建一个DS.Model,并使用一个has_many on Contacts和payment模型。然后,您可以指定'async:true'如

DS.hasMany('contact', {async: true}),
这将异步加载尚未加载的联系人。如果它们已加载,它将简单地返回加载的触点


我假设您有以下模型:联系人、付款。

您使用的是ember数据还是普通的旧ajax?我使用的是ember数据。是的,我有这些模型,但currentUser有很多联系人和付款。例如,如果我设置了async:true与currentUser有很多关系,我的rails联系人索引操作有以下代码
Venmo.new(current\u user.Venmo\u token,current\u user.Venmo\u id)。get\u contacts.to\u json
这个方法只会被点击一次,然后缓存到ember中?那么如果你有像“currentUser”这样的模型,“contacts”和“payments”,并且在模型中指定的contacts和payments上都有一个has_many,然后在这些上指定async true将仅在您的代码尝试访问其中的内容时加载它们,例如currentUser.payments.length,然后将向您的payments/index操作发出ajax请求,尚未加载iff付款。